Я бы хотел настроить взаимоотношения в Laravel Nova.
a Вопрос имеет n Альтернативы a Вопрос имеет 1 Ответ (что является альтернативой)
В моделях Laravel:
Вопрос :
public function alternatives()
{
return $this->hasMany(Alternative::class);
}
public function answer()
{
return $this->belongsTo(Alternative::class, 'answer_id', 'id');
}
Альтернатива :
public function question()
{
return $this->belongsTo(Question::class);
}
public function isAnswerOf()
{
return$this->hasOne(Question::class, 'answer_id');
}
Вопрос (Nova) :
public function fields(Request $request)
{
return [
ID::make()->sortable(),
CKEditor::make('Wording', 'wording')->alwaysShow(),
Boolean::make('Verified', 'is_verified'),
Select::make('Type')->options([
'multiple_choice' => 'Multiple Choice',
'right_or_wrong' => 'Right or Wrong'
]),
Tags::make('Nível')->type('level')->single(),
Tags::make('Assuntos')->type('topic'),
HasMany::make('Alternatives'),
BelongsTo::make('Answer', 'answer', Alternative::class)->searchable()->nullable()
];
}
Альтернатива (Nova) :
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Text::make('Text', 'letter'),
CKEditor::make('Body', 'body'),
BelongsTo::make('Question', 'question', Question::class),
HasOne::make('IsAnswerOf', 'isAnswerOf', Question::class)
];
}
Существуют миллионы альтернатив.С BelongsTo::make('Answer', 'answer', Alternative::class)->searchable()->nullable()
я бы хотел показать только ответы (альтернативы), которые являются альтернативами этого вопроса.Другими словами, я хочу, чтобы это поле было заполнено альтернативами, которые answer_id совпадают с заданным вопросом.
Я нашел в Google недокументированный 1 2 3 функция называется relatable {Query}, но я не могу получить желаемое поведение.
public static function relatableAlternatives(NovaRequest $request, $query)
{
// $alternative = $request->findResourceOrFail(); (is failing)
return $query->where('question_id', 'like', '219320');
}
В relatable {Model} "Model" должна быть сама модель или псевдоним, который я дал в Novas Resource?(что является ответом)?
Если я жестко закодировал вопрос_ид, он работает.Как я могу получить вопрос_id?