2015-10-15 79 views
0

我想获取相关/嵌套对象的属性。问题对象有很多选择,并且我想返回一个具有等于True/1的correct字段的某个选项。获取相关/嵌套对象的属性

所以我由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;

但得到这个错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$choice

我试着用压平:

$answer = $question->choice->where('correct', 1)->flatten(); 

但所有这样做是删除的问题ID 2,但不允许我进入对象属性。

回答

1

如果您想从数据库中检索该值,请使用其他答案。

但它看起来像你已经检索所有的答案为Collection,并希望过滤该集合。

where方法返回另一个集合。因此,要获得只是一个元素,使用first

$answer = $question->choice->where('correct', 1)->first(); 

这给你的实际雄辩对象

然后你就可以访问任何属性如常。

return $answer->choice; 
1

使用value方法从数据库中获取单个值:

$choice = $question->choice()->where('correct', 1)->value('choice'); 

BTW,你应该将choice方法重命名为choices,因为它是一个hasMany关系。