我想在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()
,我只想显示作为该问题替代方案的答案(替代方案)。换句话说,我希望此字段中填充有与给定问题相同的question_id的替代项。
我在Google中发现了一个称为relatable {Query}的未记录的1 2 3功能,但是我无法获得所需的行为。
public static function relatableAlternatives(NovaRequest $request, $query)
{
// $alternative = $request->findResourceOrFail(); (is failing)
return $query->where('question_id', 'like', '219320');
}
在可关联的{Model}中,“ Model”应该是模型本身还是我在Novas Resource中提供的别名? (这是答案)?
如果我对question_id进行硬编码,则可以。我如何获得question_id?