所以,这个问题有点复杂,我不知道我是否正在寻找解决方案的正确途径。
我在数据库中有几个表,我想用作api。我为表创建了一个资源,该表返回来自不同表的字段。
我有以下文件:
表的资源文件如下所示:
public function toArray($request)
{
'id' => $this->id,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'name' => $this->name,
'website' => $this->website,
'categories' => CategoryResource::collection($this->categories),
'photos' => PhotoResource::collection($this->photos),
}
如您所见,资源正在引用不同的资源并为其创建单个对象 我的控制器有两个功能来为具有特定id的所有数据和数据提供服务。
看起来像这样:
public function showAll()
{
return TableResource::collection(TableApi::all());
}
public function show($id)
{
return new TableResource(TableApi::find($id));
}
最后我做了一些路线:
Route::get('/table', 'TableController@showAll');
Route::get('/table/{id}', 'TableController@show');
到目前为止,一切都有效 现在出现以下情况:我希望表中的数据不仅通过id过滤,而且通过其中一个引用表的名称进行过滤。所以基本上我想要所有类别 - >名称为“Test”的条目 我的方法是否可以实现这一点?
答案 0 :(得分:1)
如果TableApi
是您的模型并且您声明了与Category
模型的关系,则可以执行以下操作:
TableApi::where('id', $id)->whereHas('categories', function($query) {
$query->where('category.name', 'Test')
})->first();
您可以使用Category
添加相关的Photo
和with()
模型。
TableApi::where('id', $id)->whereHas('categories', function($query) {
$query->where('category.name', 'Test')
})->with(['categories', 'photos'])->first();
您可以阅读有关querying relationships existence in the Laravel documentation的更多信息。