Laravel资源api使用引用表

时间:2017-11-10 15:11:33

标签: php mysql laravel laravel-5.5

所以,这个问题有点复杂,我不知道我是否正在寻找解决方案的正确途径。
我在数据库中有几个表,我想用作api。我为表创建了一个资源,该表返回来自不同表的字段。

我有以下文件:

  • Http / Table.php(模型)
  • Http / Resources / TableResource.php(资源)
  • Http / Controller / Tablecontroller.php(控制器)
  • routes / api.php(路线文件)

表的资源文件如下所示:

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”的条目 我的方法是否可以实现这一点?

1 个答案:

答案 0 :(得分:1)

如果TableApi是您的模型并且您声明了与Category模型的关系,则可以执行以下操作:

TableApi::where('id', $id)->whereHas('categories', function($query) {
    $query->where('category.name', 'Test')
})->first();

您可以使用Category添加相关的Photowith()模型。

TableApi::where('id', $id)->whereHas('categories', function($query) {
    $query->where('category.name', 'Test')
})->with(['categories', 'photos'])->first();

您可以阅读有关querying relationships existence in the Laravel documentation的更多信息。