我想根据存储在表中的数组中是否存在单个值来返回帖子的集合。
在我的帖子表中,我有常规的列名,例如“ title”,“ body”和“ slug”。我正在使用同一张表管理多个站点,因此我还有一个额外的列名“ site_ids”。当用户创建帖子时,他们选择他们要发布在哪个网站上,并将网站ID存储为数组(例如[1,2])
-----------------------------------------------
| Title | Site_ids | Slug |
-----------------------------------------------
| Test Title |[1,2,3] |test-title |
-----------------------------------------------
| Another Title |[1,6] |another-title |
-----------------------------------------------
现在,我正在创建一个API,以返回site_id为1的所有帖子。如何实现?这是我的PostController中的当前代码
API路由
Route::get('/{site_id}/posts','PostController@index')->name('Show Posts');
代码:
public function index($site_id)
{
// Return all posts by id
$posts = Post::whereIn('sites', $site_id)->get();
return new PostCollection($posts);
}
我收到此错误消息
为foreach()提供的参数无效
我在这里做什么错了?
答案 0 :(得分:1)
答案 1 :(得分:0)
whereIn
的第二个参数必须是一个数组。您应该这样做:
public function index($site_id)
{
// Return all posts by id
$posts = Post::whereRaw('JSON_CONTAINS(sites, \'{$site_id}\')')->get();
return new PostCollection($posts);
}
答案 2 :(得分:0)
我知道这很可能会被否决,但是老实说,这就是您做错的事情:
”“我想返回一个帖子集合,基于单个 值存在于存储在表中的数组中。”
您应该使用数据透视表在“帖子”和“网站”之间建立多对多关系,然后您可以执行以下操作:
Site::find($id)->Posts;
https://laravel.com/docs/5.6/eloquent-relationships#many-to-many