php - 在多个相关表中执行满足条件的 Laravel Eloquent 'select' 语句
问题描述
我有一个带有表的博客数据库架构posts
,categories
还有更多。对于posts
表中的每条记录,都有一列post_category
包含表中记录的 id categories
。还有标志字段(用于表格)post_active
分别指示帖子/类别是否可供读取(如果 1 - 活动,如果 0 - 不活动)。cat_active
categories
例如:
表“帖子”:
+---------+------------+----------------+---------------+-------------+
| 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。
任何帮助是极大的赞赏!
解决方案
你可以使用 awhereHas
来做你想做的事。
后模型
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();
这将仅过滤具有活动类别的帖子。
推荐阅读
- amazon-web-services - AWS 的响应有时需要一些时间
- ios - 在路径中使用 /#/ 创建 URL 并在 safari 中打开
- docker - Heroku 部署使用 heroku.yml 卡住了
- android - 在“保存到 Google Pay”的 onActivityResult() 方法中始终获得“resultCode”值 1
- javascript - jquery datatable serverside pagination stype null
- api - React Redux Saga API 调用
- javascript - 使用 querySelector 获取包含类的所有元素
- python - 以电子表格格式转换 python 输出
- javascript - 如何在angular 4中将json数据构建为formdata
- angular - Angular 6 - 从 A 组件的模板中调用 B 组件的字段