2 回答

TA貢獻1858條經驗 獲得超8個贊
Laravel 沒有提供解決方案來為不同的表創建帶有子類的基本模型。反過來也是完全可能的:
class Event extends Model
{
protected $table = 'events';
}
class EventA extends Event
{
protected static function boot()
{
parent::boot();
static::addGlobalScope(function (Builder $query) {
$query->where('events.type', '=', 'a');
});
}
}
class EventB extends Event
{
protected static function boot()
{
parent::boot();
static::addGlobalScope(function (Builder $query) {
$query->where('events.type', '=', 'b');
});
}
}
我通過使用數據透視表的中間模型并將某些屬性代理到子模型來解決類似的問題。
那么你的關系將是BelongsTo和HasMany。
在 UX 方面,您可以通過有條件地檢查資源屬性來自定義 Nova 中的字段。盡管我建議僅在詳細信息和表單視圖上執行此操作,因為在返回具有不同列的行時索引表將關閉。
public function fields(Request $request)
{
return array_filter([
ID::make()->sortable(),
value(function () {
if ($this->type === 'a') {
return Boolean::make('A specific field')->hideFromIndex();
}
}),
value(function () {
if ($this->type === 'b') {
return Boolean::make('B specific field')->hideFromIndex();
}
}),
]);
}

TA貢獻1812條經驗 獲得超5個贊
我最近才發現kirschbaum-development/nova-inline-relationship 這個包允許你將關系內聯到一個 nova 資源中,因此允許一個像這樣的結構:
class Event extends Model
{
public function eventable()
{
return $this->morphTo();
}
}
class Workshop extends Model
{
public function event()
{
return $this->morphOne(Event::class, 'eventable');
}
}
class StageTalk extends Model
{
public function event()
{
return $this->morphOne(Event::class, 'eventable');
}
}
然后在 nova 資源中
class Workshop extends Resource
{
public function fields(Request $request)
{
return [
MorphOne::make('Event')->inline(),
];
}
}
- 2 回答
- 0 關注
- 209 瀏覽
添加回答
舉報