Skip to content

Commit 009b44c

Browse files
committed
HasOrder, HasMediable and fixes
1 parent 5840688 commit 009b44c

File tree

7 files changed

+64
-71
lines changed

7 files changed

+64
-71
lines changed

database/migrations/create_media_table.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public function up(): void
2525

2626
$table->keyMorphs(
2727
Config::getMediableKeyType(KeyType::BigInteger),
28-
Config::getMediableRelationName()
28+
Config::getMediableRelationName('mediable')
2929
);
3030

3131
$table->string('collection')->index();

src/Models/Media.php

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,22 @@
33
namespace Yuges\Mediable\Models;
44

55
use Yuges\Package\Models\Model;
6+
use Yuges\Mediable\Config\Config;
67
use Yuges\Mediable\Traits\HasUrl;
78
use Yuges\Mediable\Traits\HasPath;
8-
use Yuges\Mediable\Traits\HasOrder;
9+
use Yuges\Orderable\Traits\HasOrder;
10+
use Yuges\Mediable\Traits\HasMediable;
911
use Illuminate\Support\Facades\Storage;
1012
use Yuges\Mediable\Traits\HasResponsive;
1113
use Yuges\Mediable\Traits\HasPlaceholder;
14+
use Yuges\Orderable\Options\OrderOptions;
15+
use Yuges\Orderable\Interfaces\Orderable;
16+
use Illuminate\Database\Eloquent\Builder;
1217
use Symfony\Component\HttpFoundation\File\File;
13-
use Illuminate\Database\Eloquent\Relations\MorphTo;
1418
use Illuminate\Database\Eloquent\Factories\HasFactory;
1519
use Symfony\Component\HttpFoundation\File\UploadedFile;
1620

1721
/**
18-
* @property string $mediable_id
19-
* @property string $mediable_type
2022
* @property string $collection
2123
* @property string $disk
2224
* @property string $directory
@@ -29,20 +31,26 @@
2931
* @property ?array $conversions
3032
* @property ?array $properties
3133
*/
32-
class Media extends Model
34+
class Media extends Model implements Orderable
3335
{
3436
use
3537
HasUrl,
3638
HasPath,
3739
HasOrder,
3840
HasFactory,
41+
HasMediable,
3942
HasResponsive,
4043
HasPlaceholder;
4144

4245
protected $table = 'media';
4346

4447
protected $guarded = ['id'];
4548

49+
public function getTable(): string
50+
{
51+
return Config::getMediaTable() ?? $this->table;
52+
}
53+
4654
protected function casts(): array
4755
{
4856
return [
@@ -55,9 +63,15 @@ protected function casts(): array
5563
];
5664
}
5765

58-
public function mediable(): MorphTo
66+
public function orderable(): OrderOptions
5967
{
60-
return $this->morphTo();
68+
$options = new OrderOptions();
69+
70+
$options->query = fn (Builder $builder) => $builder
71+
->where('mediable_id', $this->mediable_id)
72+
->where('mediable_type', $this->mediable_type);
73+
74+
return $options;
6175
}
6276

6377
public function setFile(UploadedFile|File $file)

src/Observers/MediaObserver.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@ class MediaObserver
99
{
1010
public function creating(Media $media): void
1111
{
12-
if ($media->shouldSortWhenCreating()) {
13-
if (is_null($media->order)) {
14-
$media->setHighestOrderNumber();
15-
}
16-
}
12+
# code...
1713
}
1814

1915
public function updating(Media $media): void
2016
{
21-
17+
# code...
2218
}
2319

2420
public function deleted(Media $media): void

src/Observers/MediableObserver.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,23 @@
33
namespace Yuges\Mediable\Observers;
44

55
use Yuges\Mediable\Models\Media;
6+
use Yuges\Mediable\Interfaces\Mediable;
7+
use Illuminate\Database\Eloquent\SoftDeletes;
68

79
class MediableObserver
810
{
9-
public function deleted(Media $media): void
11+
public function deleting(Mediable $model): void
1012
{
13+
if (! $model->shouldDeleteMedia()) {
14+
return;
15+
}
1116

17+
if (in_array(SoftDeletes::class, class_uses_recursive($model))) {
18+
if (! $model->forceDeleting) {
19+
return;
20+
}
21+
}
22+
23+
$model->media()->cursor()->each(fn (Media $media) => $media->forceDelete());
1224
}
1325
}

src/Traits/HasMedia.php

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
namespace Yuges\Mediable\Traits;
44

55
use Yuges\Mediable\Models\Media;
6-
use Yuges\Mediable\Interfaces\Mediable;
6+
use Yuges\Mediable\Config\Config;
77
use Yuges\Mediable\Managers\MediaManager;
8-
use Illuminate\Database\Eloquent\SoftDeletes;
8+
use Yuges\Mediable\Observers\MediableObserver;
99
use Yuges\Mediable\Collections\MediaCollection;
1010
use Yuges\Mediable\Conversions\MediaConversion;
1111
use Yuges\Mediable\Collections\MediaCollections;
@@ -22,21 +22,9 @@ trait HasMedia
2222

2323
protected bool $deleteMedia = true;
2424

25-
public static function bootHasMedia(): void
25+
protected static function bootHasMedia(): void
2626
{
27-
static::deleting(function (Mediable $model) {
28-
if (! $model->shouldDeleteMedia()) {
29-
return;
30-
}
31-
32-
if (in_array(SoftDeletes::class, class_uses_recursive($model))) {
33-
if (! $model->forceDeleting) {
34-
return;
35-
}
36-
}
37-
38-
$model->media()->cursor()->each(fn (Media $media) => $media->forceDelete());
39-
});
27+
static::observe(Config::getMediableObserverClass(MediableObserver::class));
4028
}
4129

4230
public function shouldDeleteMedia(): bool

src/Traits/HasMediable.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Yuges\Mediable\Traits;
4+
5+
use Yuges\Mediable\Config\Config;
6+
use Illuminate\Database\Eloquent\Model;
7+
use Yuges\Mediable\Interfaces\Mediable;
8+
use Illuminate\Database\Eloquent\Relations\MorphTo;
9+
10+
/**
11+
* @property string $mediable_id
12+
* @property int|string $mediable_type
13+
*
14+
* @property ?Mediable $mediable
15+
*/
16+
trait HasMediable
17+
{
18+
public function mediable(): MorphTo
19+
{
20+
/** @var Model $this */
21+
return $this->morphTo(Config::getMediableRelationName('mediable'));
22+
}
23+
}

src/Traits/HasOrder.php

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)