我想获取相关/嵌套对象的属性。问题对象有很多选择,我希望返回一个correct
字段等于True / 1的特定选项。
所以我通过ID得到了问题:
$question = Question::find($request->get('id'));
然后得到正确的== 1的相关选择:
$answer = $question->choice->where('correct', 1);
return $answer;
响应是数组中的对象:
[
2
{
"id": 3,
"choice": "Non eos architecto ut.",
"question_id": 1,
"correct": 1,
}
]
我想访问选择字段:
return $answer->choice;
但是得到这个错误:
未定义的属性:Illuminate \ Database \ Eloquent \ Collection :: $ choice
我尝试使用flatten:
$answer = $question->choice->where('correct', 1)->flatten();
但所有这一切都是删除问题ID 2
,但不允许我访问对象属性。
答案 0 :(得分:1)
使用value
方法从数据库中获取单个值:
$choice = $question->choice()->where('correct', 1)->value('choice');
顺便说一句,您应该将choice
方法重命名为choices
,因为它是hasMany
关系。
答案 1 :(得分:1)
如果您只想从数据库中检索那一个值,请使用另一个答案。
但看起来您已经将所有答案检索为Collection,并希望过滤该集合。
where
方法返回另一个Collection。因此,要获得一个元素,请使用first
:
$answer = $question->choice->where('correct', 1)->first();
这为您提供了实际的Eloquent对象
然后您可以照常访问任何属性。
return $answer->choice;