我想返回一个post集合,基于表中存储的数组中是否存在单个值。
在我的posts表中,我有常规的列名,比如“title”、“body”和“slug”。我使用同一个表管理多个站点,因此我有一个额外的列名'site\u ids'。当用户创建一篇文章时,他们会选择要发布的站点,并将站点id存储为一个数组(例如[1,2])
-----------------------------------------------
| Title | Site_ids | Slug |
-----------------------------------------------
| Test Title |[1,2,3] |test-title |
-----------------------------------------------
| Another Title |[1,6] |another-title |
-----------------------------------------------
现在我正在创建一个api来返回站点id为1的所有帖子。如何做到这一点?这是我的后控制器中的当前代码
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()提供的参数无效
我做错什么了?
3条答案
按热度按时间hc8w905p1#
您可以尝试whereraw('json_contains(meta,“1”)')之类的东西。检查mysql中的命令。另外,如果你在5.7的拉威尔你可能要检查这个
ee7vknir2#
的第二个参数
whereIn
必须是数组。您应该这样做:6yoyoihd3#
我知道这很可能会被否决,但老实说,这就是你做错的地方:
我想返回一个post集合,基于表中存储的数组中是否存在单个值
您应该使用透视表在帖子和站点之间建立多对多关系,然后您可以执行以下操作:
https://laravel.com/docs/5.6/eloquent-relationships#many-对很多人来说