【发布时间】:2015-03-15 20:14:19
【问题描述】:
我有 2 张桌子:users 和 articles。 users 表有一个名为is_suspended 的列,它接受yes 或no,articles 表有一个名为is_published 的列,它接受0 或1。要从数据库中获取文章数据,articles.is_published 必须等于 1 并且 users.is_suspended 必须等于 no。现在假设users.is_suspended 等于yes,如果我尝试使用这样的查询生成器获取文章的数据:
// first code:
$articles = Article::join('users', 'articles.user_id', '=', 'users.user_id')
->select(['articles.*', 'users.user_name', 'users.user_email'])
->where('articles.article_id', '=', 9)
->where('articles.is_published', '=', 1)
->where('users.is_suspended', '=', 'no')
->get();
这将完美运行并且不会返回任何内容(因为users.is_suspended = yes)。现在让我们尝试使用 Laravel Eloquent ORM 获取同一篇文章,如下所示:
// second code:
$articles = Article::with([
'user' => function($query) {
$query->select(['user_id', 'user_name', 'user_email'])
->where('users.is_suspended', '=', 'no');
}])
->where('articles.article_id', '=', 9)
->where('articles.is_published', '=', 1)
->get();
在这种情况下,我会得到下一个结果:
[
{
article_id: 9,
user_id: 1,
article_title: "Article title here",
article_body: "Article body here",
is_published: 1,
created_at: "2015-01-17 02:26:24",
updated_at: "2015-01-17 02:26:24",
user: null
}
]
即使用户被挂起,它也会获取文章的数据,这是错误的。所以我的问题是如何修复第二个代码以像第一个代码一样工作?
【问题讨论】:
标签: php mysql laravel orm eloquent