Skip to content

Commit 5f5b303

Browse files
committed
order and groupables relation
1 parent 0bb396f commit 5f5b303

File tree

5 files changed

+47
-49
lines changed

5 files changed

+47
-49
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
"require": {
2525
"php": "^8.4",
2626
"yuges-code/laravel-package": "^1.0",
27-
"yuges-code/laravel-sluggable": "^1.0"
27+
"yuges-code/laravel-sluggable": "^1.0",
28+
"yuges-code/laravel-orderable": "^1.0"
2829
},
2930
"require-dev": {
3031
"orchestra/testbench": "^10.0"

src/Models/Group.php

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55
use Yuges\Package\Models\Model;
66
use Yuges\Groupable\Config\Config;
77
use Yuges\Sluggable\Traits\HasSlug;
8-
use Yuges\Groupable\Traits\HasOrder;
8+
use Yuges\Orderable\Traits\HasOrder;
99
use Yuges\Groupable\Traits\HasParent;
1010
use Yuges\Sluggable\Options\SlugOptions;
11+
use Yuges\Orderable\Options\OrderOptions;
1112
use Yuges\Sluggable\Interfaces\Sluggable;
13+
use Yuges\Orderable\Interfaces\Orderable;
14+
use Illuminate\Database\Eloquent\Builder;
15+
use Yuges\Groupable\Traits\HasGroupables;
1216
use Yuges\Groupable\Traits\HasGrouperator;
1317
use Illuminate\Database\Eloquent\Factories\HasFactory;
1418

@@ -17,9 +21,9 @@
1721
* @property string $slug
1822
* @property null|string $type
1923
*/
20-
class Group extends Model implements Sluggable
24+
class Group extends Model implements Sluggable, Orderable
2125
{
22-
use HasFactory, HasParent, HasGrouperator, HasSlug, HasOrder;
26+
use HasFactory, HasParent, HasGrouperator, HasGroupables, HasSlug, HasOrder;
2327

2428
protected $table = 'groups';
2529

@@ -42,11 +46,14 @@ public function sluggable(): SlugOptions
4246
return $options;
4347
}
4448

45-
public function getHighestOrderNumber(): int
49+
public function orderable(): OrderOptions
4650
{
47-
return (int) static::query()
51+
$options = new OrderOptions();
52+
53+
$options->query = fn (Builder $builder) => $builder
4854
->where('grouperator_id', $this->grouperator_id)
49-
->where('grouperator_type', $this->grouperator_type)
50-
->max($this->determineOrderColumnName());
55+
->where('grouperator_type', $this->grouperator_type);
56+
57+
return $options;
5158
}
5259
}

src/Models/Groupable.php

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@
44

55
use Yuges\Groupable\Config\Config;
66
use Yuges\Package\Traits\HasTable;
7-
use Yuges\Groupable\Traits\HasOrder;
7+
use Yuges\Orderable\Traits\HasOrder;
88
use Yuges\Package\Traits\HasTimestamps;
9+
use Illuminate\Database\Eloquent\Builder;
10+
use Yuges\Orderable\Options\OrderOptions;
11+
use Yuges\Orderable\Interfaces\Orderable;
912
use Yuges\Groupable\Traits\HasGrouperator;
1013
use Illuminate\Database\Eloquent\Relations\MorphTo;
1114
use Illuminate\Database\Eloquent\Factories\HasFactory;
1215
use Illuminate\Database\Eloquent\Relations\MorphPivot;
1316

14-
class Groupable extends MorphPivot
17+
class Groupable extends MorphPivot implements Orderable
1518
{
1619
use HasFactory, HasTable, HasTimestamps, HasGrouperator, HasOrder;
1720

@@ -29,12 +32,15 @@ public function groupable(): MorphTo
2932
return $this->morphTo();
3033
}
3134

32-
public function getHighestOrderNumber(): int
35+
public function orderable(): OrderOptions
3336
{
34-
return (int) static::query()
37+
$options = new OrderOptions();
38+
39+
$options->query = fn (Builder $builder) => $builder
3540
->where('group_id', $this->group_id)
3641
->where('grouperator_id', $this->grouperator_id)
37-
->where('grouperator_type', $this->grouperator_type)
38-
->max($this->determineOrderColumnName());
42+
->where('grouperator_type', $this->grouperator_type);
43+
44+
return $options;
3945
}
4046
}

src/Traits/HasGroupables.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Yuges\Groupable\Traits;
4+
5+
use Illuminate\Support\Collection;
6+
use Yuges\Groupable\Config\Config;
7+
use Yuges\Groupable\Models\Groupable;
8+
use Illuminate\Database\Eloquent\Relations\HasMany;
9+
10+
/**
11+
* @property Collection<array-key, Groupable> $groupables
12+
*/
13+
trait HasGroupables
14+
{
15+
public function groupables(): HasMany
16+
{
17+
return $this->hasMany(Config::getGroupableClass(Groupable::class));
18+
}
19+
}

src/Traits/HasOrder.php

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

0 commit comments

Comments
 (0)