|
26 | 26 | use Illuminate\Database\Eloquent\Casts\AsEncryptedCollection;
|
27 | 27 | use Illuminate\Database\Eloquent\Casts\AsEnumArrayObject;
|
28 | 28 | use Illuminate\Database\Eloquent\Casts\AsEnumCollection;
|
| 29 | +use Illuminate\Database\Eloquent\Casts\AsFluent; |
29 | 30 | use Illuminate\Database\Eloquent\Casts\AsHtmlString;
|
30 | 31 | use Illuminate\Database\Eloquent\Casts\AsStringable;
|
31 | 32 | use Illuminate\Database\Eloquent\Casts\AsUri;
|
|
47 | 48 | use Illuminate\Support\Carbon;
|
48 | 49 | use Illuminate\Support\Collection as BaseCollection;
|
49 | 50 | use Illuminate\Support\Facades\Crypt;
|
| 51 | +use Illuminate\Support\Fluent; |
50 | 52 | use Illuminate\Support\HtmlString;
|
51 | 53 | use Illuminate\Support\InteractsWithTime;
|
52 | 54 | use Illuminate\Support\Stringable;
|
@@ -304,6 +306,30 @@ public function testDirtyOnCastedUri()
|
304 | 306 | $this->assertTrue($model->isDirty('asUriAttribute'));
|
305 | 307 | }
|
306 | 308 |
|
| 309 | + public function testDirtyOnCastedFluent() |
| 310 | + { |
| 311 | + $value = [ |
| 312 | + 'address' => [ |
| 313 | + 'street' => 'test_street', |
| 314 | + 'city' => 'test_city', |
| 315 | + ], |
| 316 | + ]; |
| 317 | + |
| 318 | + $model = new EloquentModelCastingStub; |
| 319 | + $model->setRawAttributes(['asFluentAttribute' => json_encode($value)]); |
| 320 | + $model->syncOriginal(); |
| 321 | + |
| 322 | + $this->assertInstanceOf(Fluent::class, $model->asFluentAttribute); |
| 323 | + $this->assertFalse($model->isDirty('asFluentAttribute')); |
| 324 | + |
| 325 | + $model->asFluentAttribute = new Fluent($value); |
| 326 | + $this->assertFalse($model->isDirty('asFluentAttribute')); |
| 327 | + |
| 328 | + $value['address']['street'] = 'updated_street'; |
| 329 | + $model->asFluentAttribute = new Fluent($value); |
| 330 | + $this->assertTrue($model->isDirty('asFluentAttribute')); |
| 331 | + } |
| 332 | + |
307 | 333 | // public function testDirtyOnCastedEncryptedCollection()
|
308 | 334 | // {
|
309 | 335 | // $this->encrypter = m::mock(Encrypter::class);
|
@@ -3802,6 +3828,7 @@ protected function casts(): array
|
3802 | 3828 | 'asStringableAttribute' => AsStringable::class,
|
3803 | 3829 | 'asHtmlStringAttribute' => AsHtmlString::class,
|
3804 | 3830 | 'asUriAttribute' => AsUri::class,
|
| 3831 | + 'asFluentAttribute' => AsFluent::class, |
3805 | 3832 | 'asCustomCollectionAttribute' => AsCollection::using(CustomCollection::class),
|
3806 | 3833 | 'asEncryptedArrayObjectAttribute' => AsEncryptedArrayObject::class,
|
3807 | 3834 | 'asEncryptedCustomCollectionAttribute' => AsEncryptedCollection::using(CustomCollection::class),
|
|
0 commit comments