资源关系?

时间:2017-12-17 15:28:57

标签: laravel laravel-5

所以我打算开始使用resources作为我的“API”(vue端点)。所以我开始搜索有关该主题的一些教程,并找到了描述该过程的youtuber。我开始制作自己的API资源。 youtuber简要显示how to use the relations,但问题是我在尝试使用资源中的关系时收到Property [description] does not exist on this collection instance.

目前的设置是:

$stack = Stack::select(['id', 'name', 'subject_id', 'description', 'image'])->where('id', '=', $requestId)->first();
$questions = $stack->load('question.choiceInRandomOrder');

return $questions;

对于资源,它会是这样的(注意choiceInRandomOrde,我也需要这种关系):

return [
   'subject' => $this->subject->name,
   'name' => $this->name,
   'slug' => $this->slug,
   'description' => $this->description,
   'image' => $this->image,
   'questions' => [
       'description' => $this->question->description,
       'is_info' => $this->question->is_info,
       'source' => $this->question->source,
       'image' => $this->question->image,
      ]
   ];
}

为了进行测试,我在路线web.php

中设置了以下内容
use App\Stack;
use App\Http\Resources\StackResource;

Route::get('/json', function(){
    $stack = Stack::find(2);
    return new StackResource($stack);
});

2 个答案:

答案 0 :(得分:0)

您尝试访问namesubject的{​​{1}},但未加载该关系。

答案 1 :(得分:0)

我不知道我是否正确,但我认为它必须是这样一个事实,即不执行Eloquent调用而是查询生成器调用(执行$stack = Stack::select ...时)。如果您可以选择直接在模型类中显示的参数,为什么只选择调用中的某些字段? (见this)。

尝试进行一次Eloquent调用(类似于Stack::find(1))并测试它。它应该工作。