获取相关/嵌套对象的属性

时间:2015-10-15 16:04:21

标签: laravel laravel-5 eloquent

我想获取相关/嵌套对象的属性。问题对象有很多选择,我希望返回一个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,但不允许我访问对象属性。

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;