考虑以下代码:
Articles
::select('article_id', 'article_text') //This one does not work as expected
->with([
'user' => function($q){
$q->select('user_id', 'user_name'); // This one works fine
}
])
->get();
在Eloquent中构建查询时,我们可以使用 - > with()来检索关联模型。我们还可以附加 - > select(),以确定应从关联模型中选择哪些列。但是,看起来我们没有可能指定应该从我们查询的基本模型中选择哪些列。
在此示例中,由于第一个::select
,返回的最终结果不包含user
,因为它未包含在::select
列表中。如果我在那里包含它,那么它会引发关于column not found
的错误。 Eloquent不够聪明,不能理解我的意思是关系,而不是专栏。
是否可以指定应从user
以及article
返回哪些列?
答案 0 :(得分:2)
您可以使用预先加载的约束选择所需的列,但仍然需要至少选择用于关系的列。
随机示例:
User::with(['tickets' => function ($q) {
$q->select('user_id');
}])->select('id')->get();
这些是返回关系结果并将它们附加到正确模型所需的最小字段。
您需要从user_id
和tickets
中id
选择至少users
。这些是用于这种关系的列。 tickets.user_id
- > users.id
查询日志:
'select `id` from `users`'
'select `user_id` from `tickets` where `tickets`.`user_id` in ( .... )'
拥有这些字段可以为您提供返回结果的关系所需的内容,现在您可以为这些选择添加其他字段。
我希望有所帮助。