Laravel Nova Самореферентные отношения
В Laravel, если я хочу создать ссылку на себя, я могу сделать следующее:
class Post extends Eloquent
{
public function parent()
{
return $this->belongsTo('Post', 'parent_id');
}
public function children()
{
return $this->hasMany('Post', 'parent_id');
}
}
Как сделать так, чтобы ресурс Laravel Nova отображал это соединение?
public function fields(Request $request)
{
return [
Text::make('Autor', 'author'),
Select::make('Type', 'type')->options([
'News' => 'news',
'Update' => 'update',
]),
BelongsToMany::make('Post') // does not work
];
}
1 ответ
Вы можете достичь того, что вы хотите, как это:
BelongsTo::make('Parent', 'parent', Post::class),
HasMany::make('Children', 'children', Post::class),
Это позволит выбрать родительский пост при создании или обновлении поста. Когда вы находитесь на странице подробностей поста, вы можете видеть всех его потомков.
public function fields(Request $request)
{
return [
Text::make('Autor', 'author'),
Select::make('Type','type')->options([
'News' => 'news',
'Update' => 'update',
]),
BelongsTo::make('Parent', 'parent', Post::class),
HasMany::make('Children', 'children', Post::class),
];
}
Есть другая ситуация, когда вы обнаружите ту же проблему, если у вас есть имя родительского столбца. parent
а также отношения parent
нравиться
$table->bigIncrements('id');
$table->string('category');
$table->unsignedBigInteger('parent')->nullable();
и в модели
public function parent()
{
return $this->belongsTo(SELF::class, 'parent');
}
Он не сможет распознать parent
свойство, и вы снова столкнетесь с этой проблемой. В этом случае вы можете изменить relationship name
или column name
, и он будет работать нормально.
Также помните аргументы в пользу Новы BelongsTo
отношения
Аргумент 1. Имя для отображения (например, Parent
)
Аргумент 2. Имя отношения, используемое в модели (например, parent
)
Аргумент 3. Ресурс Nova (например, App\Nova\Category
)