我想要使用Eloquent
执行以下查询。
$restaurant = Restaurant::with([
'user' => function($query)
{
$query->select(['username']); // This doesn't work
$query->whereStatus('confirmed');
}
])->find($id);
我想要获取Restaurant
并且它是相应的User
(它们是相关的),但是从User
我不是所有的信息。在这种情况下只有username
。
我可以向$hidden
模型添加属性User
,但是对于每个查询都会隐藏它们(以array / json形式)。但我只想为此查询限制一点。
如果我添加select(有或没有将它包装在一个数组中),我得到以下结果:
{
'id': 1,
'user': null
}
然而,如果我删除该选项,我会得到完整的User
:
{
'id': 1,
'user': { .. json user data }
}
User
确实存在且username
不为空。我怎么能这样做呢?
此处可以找到actual输出。
编辑:当我将select中的值更改为数据库中不存在的内容时,我看到一个错误,从中我推断出Query是正确的,但我只是没有得到任何输出。 (使用无效列'test'时得到的查询。)
select `test` from `users` where `users`.`deleted_at` is null and `users`.`userable_id` in (1) and `users`.`userable_type` = Restaurant and `status` = confirmed)
答案 0 :(得分:1)
尝试这种方式:
$restaurant = Restaurant::with([
'user' => function($query)
{
$query->whereStatus('confirmed')->lists('username');
}
])->find($id);
修改强>
似乎两种方法都可以工作,但您需要满足一个条件 - 您需要在列表/选择中包含foreign_key列。我不知道您的关系是什么,但例如假设您在users
表restaurant_id
列中,则需要使用以下代码:
$restaurant = Restaurant::with([
'user' => function($query)
{
$query->select(['username', 'restaurant_id'])->whereStatus('confirmed');
}
])->find($id);
或
$restaurant = Restaurant::with([
'user' => function($query)
{
$query->whereStatus('confirmed')->lists('username','restaurant_id');
}
])->find($id);
我不知道n:n关系是否可能。您还应该考虑这可能有点危险(可能会出现一些问题)所以只有在您有充分理由抓住所选列时才应该使用它。