Laravel Eloquent ->with() 和 ->select() 相互冲突



请考虑以下代码:

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的错误.雄辩不够聪明,无法理解我指的是关系,而不是专栏。

是否可以指定应从userarticle返回哪些列?

您可以使用预先加载约束选择所需的列,但仍至少需要选择用于关系的列。

随机示例:

User::with(['tickets' => function ($q) {
    $q->select('user_id');
}])->select('id')->get();

这些是返回关系结果并将它们附加到正确模型所需的最小字段。

您需要从tickets中选择至少user_id,从users中选择至少id。这些是用于此关系的列。 tickets.user_id -> users.id

查询日志:

'select `id` from `users`'
'select `user_id` from `tickets` where `tickets`.`user_id` in ( .... )'
拥有这些字段

可提供关系返回结果所需的内容,现在您可以向这些选择添加其他字段。

我希望这有所帮助。

最新更新