首页 > 解决方案 > Laravel - 通过检查数据库中的数组中是否存在值来过滤集合

问题描述

我想根据存储在表中的数组中是否存在单个值来返回一组帖子。

在我的帖子表中,我有常规的列名,例如“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() 提供的参数无效

我在这里做错了什么?

标签: phpmysqllaraveleloquent

解决方案


你可以试试 whereRaw('JSON_CONTAINS(meta, "1")') 类似的东西。检查mysql中的命令。如果你在 5.7 的 laravel 中运行,你可能想检查一下


推荐阅读