Skip to content

Commit 651d153

Browse files
committed
wip
1 parent d6c1a60 commit 651d153

File tree

2 files changed

+75
-17
lines changed

2 files changed

+75
-17
lines changed

src/Fields/MorphToMany.php

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
use Illuminate\Database\Eloquent\Builder;
88
use Illuminate\Database\Eloquent\Model;
9+
use Illuminate\Database\Eloquent\Relations\BelongsTo as BelongsToRelation;
910
use Illuminate\Database\Eloquent\Relations\MorphPivot;
10-
use Illuminate\Database\Eloquent\Relations\MorphTo as MorphToRelation;
1111
use Illuminate\Database\Eloquent\Relations\MorphToMany as EloquentRelation;
1212
use Illuminate\Http\Request;
1313

@@ -30,24 +30,26 @@ public function getRelation(Model $model): EloquentRelation
3030
public function fields(Request $request): array
3131
{
3232
return [
33-
MorphTo::make($this->getRelatedName(), 'related', static fn (MorphPivot $model): MorphToRelation => $model->morphTo(
34-
'related',
35-
$model->getMorphType(),
36-
$model->getRelatedKey(),
37-
$model->getForeignKey(),
38-
)->withDefault())
39-
->withRelatableQuery(
40-
fn (Request $request, Builder $query, MorphPivot $model): Builder => $this->resolveRelatableQuery($request, $model->pivotParent)
41-
->unless($this->allowDuplicateRelations, fn (Builder $query): Builder => $query->whereNotIn(
33+
BelongsTo::make($this->getRelatedName(), 'related', static function (Model $model): BelongsToRelation {
34+
return $model->belongsTo(
35+
$model::class,
36+
$model->getRelatedKey(),
37+
$model->getForeignKey()
38+
)->withDefault();
39+
})->withRelatableQuery(function (Request $request, Builder $query, Model $model): Builder {
40+
return $this->resolveRelatableQuery($request, $model->pivotParent)
41+
->unless($this->allowDuplicateRelations, function (Builder $query) use ($model): Builder {
42+
return $query->whereNotIn(
4243
$query->getModel()->getQualifiedKeyName(),
4344
$this->getRelation($model->pivotParent)->select($query->getModel()->getQualifiedKeyName())
44-
)))
45-
->hydrate(function (Request $request, MorphPivot $model, mixed $value): void {
46-
$model->setAttribute(
47-
$this->getRelation($model->pivotParent)->getRelatedPivotKeyName(),
48-
$value
49-
);
50-
})->display(fn (Model $model): ?string => $this->resolveDisplay($model)),
45+
);
46+
});
47+
})->hydrate(function (Request $request, MorphPivot $model, mixed $value): void {
48+
$model->setAttribute(
49+
$this->getRelation($model->pivotParent)->getRelatedPivotKeyName(),
50+
$value
51+
);
52+
})->display(fn (Model $model): ?string => $this->resolveDisplay($model)),
5153
];
5254
}
5355
}

src/Fields/MorphedByMany.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Cone\Root\Fields;
6+
7+
use Illuminate\Database\Eloquent\Builder;
8+
use Illuminate\Database\Eloquent\Model;
9+
use Illuminate\Database\Eloquent\Relations\MorphPivot;
10+
use Illuminate\Database\Eloquent\Relations\MorphTo as MorphToRelation;
11+
use Illuminate\Database\Eloquent\Relations\MorphToMany as EloquentRelation;
12+
use Illuminate\Http\Request;
13+
14+
/**
15+
* @extends \Cone\Root\Fields\MorphToMany<\Illuminate\Database\Eloquent\Relations\MorphedByMany>
16+
*/
17+
class MorphedByMany extends MorphToMany
18+
{
19+
/**
20+
* {@inheritdoc}
21+
*/
22+
public function getRelation(Model $model): EloquentRelation
23+
{
24+
return parent::getRelation($model);
25+
}
26+
27+
/**
28+
* {@inheritdoc}
29+
*/
30+
public function fields(Request $request): array
31+
{
32+
return [
33+
MorphTo::make($this->getRelatedName(), 'related', static function (MorphPivot $model): MorphToRelation {
34+
return $model->morphTo(
35+
'related',
36+
$model->getMorphType(),
37+
$model->getRelatedKey(),
38+
$model->getForeignKey()
39+
)->withDefault();
40+
})->withRelatableQuery(function (Request $request, Builder $query, MorphPivot $model): Builder {
41+
return $this->resolveRelatableQuery($request, $model->pivotParent)
42+
->unless($this->allowDuplicateRelations, function (Builder $query) use ($model): Builder {
43+
return $query->whereNotIn(
44+
$query->getModel()->getQualifiedKeyName(),
45+
$this->getRelation($model->pivotParent)->select($query->getModel()->getQualifiedKeyName())
46+
);
47+
});
48+
})->hydrate(function (Request $request, MorphPivot $model, mixed $value): void {
49+
$model->setAttribute(
50+
$this->getRelation($model->pivotParent)->getRelatedPivotKeyName(),
51+
$value
52+
);
53+
})->display(fn (Model $model): ?string => $this->resolveDisplay($model)),
54+
];
55+
}
56+
}

0 commit comments

Comments
 (0)