Laravel Nova Самореферентные отношения - PullRequest
0 голосов
/ 03 декабря 2018

В 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
    ];
}

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

В другой ситуации вы обнаружите ту же проблему, если у вас есть имя родительского столбца 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, и он будет работать нормально.

Также запомните аргументы для отношения Nova BelongsTo

Аргумент 1. Имя для отображения (например, Parent)

Аргумент 2. Имя отношения, используемое вмодель (например, parent)

Аргумент 3. Новый ресурс (например, App\Nova\Category)

0 голосов
/ 03 декабря 2018

Вы можете достичь того, что вы хотите, как это:

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),
    ];
}
...