所以我打算开始使用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);
});
答案 0 :(得分:0)
您尝试访问name
中subject
的{{1}},但未加载该关系。
答案 1 :(得分:0)
我不知道我是否正确,但我认为它必须是这样一个事实,即不执行Eloquent调用而是查询生成器调用(执行$stack = Stack::select ...
时)。如果您可以选择直接在模型类中显示的参数,为什么只选择调用中的某些字段? (见this)。
尝试进行一次Eloquent调用(类似于Stack::find(1)
)并测试它。它应该工作。