php - Laravel - 通过检查数据库中数组中是否存在值来过滤集合

标签 php mysql laravel eloquent

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

在我的帖子表中,我有常规的列名称,如“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);
    }

我收到此错误消息

Invalid argument supplied for foreach()

我在这里做错了什么?

最佳答案

你可以尝试 whereRaw('JSON_CONTAINS(meta, "1")') 之类的东西。检查 command在 MySQL 中。另外,如果你在 laravel 的 5.7 中运行,你可能需要检查 this

关于php - Laravel - 通过检查数据库中数组中是否存在值来过滤集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52485800/

相关文章:

javascript - 使用 Ajax 在提交表单时保持在同一页面上不起作用

MYSQL GROUP BY 与 JSON_ARRAYAGG

mysql - 子查询返回 "single-row subquery returning more than one row"的 SQL 查询?

laravel - 如何在 Laravel 中获取非键列字段的不同值?

sqlite - 在 Laravel 迁移中决定唯一、主要或增量

laravel - 如何在运行时全局更改 SMTP 详细信息?

php - magento - 检索给定类别ID的所有子类别

PHP 从用户输入中删除 html 和 php 代码

PHP SQL 从 2 个表中获取数据并输出想要的信息

创建表的PHP脚本