我有一个博客数据库架构,其中包含表 posts
、categories
等。对于 posts
表中的每条记录,都有一个 post_category
列,其中包含 categories
表中记录的 ID。还有标志字段post_active
,分别为cat_active
(对于categories
表),指示帖子/类别是否可供读取(如果1 - 事件,如果 0 - 不活动)。
例如:
表“帖子”:
+---------+------------+----------------+---------------+-------------+
| post_id | post_title | post_content | post_category | post_active |
+---------+------------+----------------+---------------+-------------+
| 1 | Lorem..... | ipsum dolor... | 1 | 1 |
+---------+------------+----------------+---------------+-------------+
表“类别”:
+--------+----------+------------+
| cat_id | cat_name | cat_active |
+--------+----------+------------+
| 1 | Category | 1 |
+--------+----------+------------+
目前,我正在使用 Eloquent 的 where()
子句从 posts
表中选择所有事件帖子:
$posts = Post::where('post_active', '=', 1)->get();
但可能存在这样的情况:某个帖子处于事件状态 (posts.post_active = 1
),但整个类别却处于事件状态 (categories.cat_active = 0
) 。如何使用 Eloquent 选择属于事件类别的所有事件帖子? Vanilla SQL 语句也可以工作,它可以很容易地转换为 Eloquent。
非常感谢任何帮助!
最佳答案
您可以使用 whereHas
来执行您想要的操作。
发布模型
class Post ...
...
public function categories()
{
return $this->belongsTo(Category::class, 'post_category', 'cat_id');
}
然后你就可以了
$posts = Post::where('post_active', '=', 1)
->whereHas('categories', function($q) {
$q->where('cat_active','=',1)
})
->get();
这将仅过滤具有事件类别的帖子。
关于php - 执行Laravel Eloquent 'select'语句满足多个相关表中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51197624/