Laravel Nova вложенные отношения - PullRequest
0 голосов
/ 25 января 2019

Доброе время суток!
Недавно я пытался создать ресурс Nova, который зависит от другого ресурса, который предоставляет информацию для основного ресурса.

У меня есть таблица test_entries , который имеет следующие поля:

  • id
  • test_id
  • user_id

со следующими отношениями

    public function contest() : BelongsTo {
        return $this->belongsTo(Contest::class, 'contest_id', 'id');
    }

    public function user() : BelongsTo {
        return $this->belongsTo(User::class, 'user_id', 'id');
    }

Также у меня есть таблица contest_submissions со следующими полями:

  • идентификатор
  • entry_id
  • task_id
  • комментарий
  • утвержден
  • отклонен со следующими отношениями:
public function entry() : BelongsTo {
    return $this->belongsTo(ContestEntry::class, 'entry_id', 'id');
}

public function user() : BelongsTo {
    return $this->entry->user();
}

public function contest() : BelongsTo {
    return $this->entry->contest();
}

public function task() : BelongsTo {
    return $this->belongsTo(Task::class, 'task_id', 'id');
}

У меня нет проблем при получении этих данных в представлениях index и detailsиз Nova все «просто работает», однако, когда я пытаюсь обновить ресурс, я получаю сообщение об ошибке, что user() или contest() вызывается на null.

Я пробовал следующее,

return [
    BelongsTo::make('Contest', 'contest', Contests::class)->exceptOnForms(),
    BelongsTo::make('Task', 'task', ContestTasks::class)->exceptOnForms(),
    BelongsTo::make('User', 'user', AccountUsers::class)->exceptOnForms(),
]

Но по какой-то причине Nova все еще пытается извлечь эти отношения, когда я прямо говорю, что не надо.

Любые идеи приветствуются, потому что они работают везде, кроме представления update (представление create явно отключено, поскольку представления создаются пользователем во внешнем интерфейсе)

1 Ответ

0 голосов
/ 25 января 2019

Вы также должны связать с ним ограничение hideWhenUpdating().

return [
    BelongsTo::make('Contest', 'contest', Contests::class)
        ->hideWhenUpdating()
        ->exceptOnForms(),

    BelongsTo::make('Task', 'task', ContestTasks::class)
        hideWhenUpdating()
        ->exceptOnForms(),

    BelongsTo::make('User', 'user', AccountUsers::class)
        hideWhenUpdating()
        ->exceptOnForms(),
]
...