【发布时间】:2018-09-26 03:51:18
【问题描述】:
我想根据存储在表中的数组中是否存在单个值来返回帖子集合。
在我的帖子表中,我有常规的列名,例如“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() 提供的参数无效
我在这里做错了什么?
【问题讨论】:
-
在这种情况下,
foreach()是什么?PostCollection是view()的包装器吗? -
@TimLewis 这是一个 Laravel 帖子收集资源laravel.com/docs/5.6/eloquent-resources
-
啊,是的,那是我的错;没有看到 API(粗体和所有内容);必须是星期一。除此之外,我认为
whereIn()将第二个参数转换为一个数组,如果它不是一个,但下面的答案似乎是正确的。该查询是否有效?我不认为存储文字[1, 2]可以与whereIn()... -
哈哈,今天是星期一!在我将其包裹在括号中之后,该查询现在正在工作。但是它返回 0 个项目。好像它没有通过我表中的数组?
-
或者,目前要处理这个问题,您可以使用
->where("sites", "LIKE", "%".$site_id."%");来处理通配符文本搜索(松散匹配[1, 2]到1等),但这是低效的,不是最好的方法.
标签: php mysql laravel eloquent