如何使用 Laravel 的 eloquent 加载相同的列名?

Posted

技术标签:

【中文标题】如何使用 Laravel 的 eloquent 加载相同的列名?【英文标题】:How to eager load same column names using Laravel's eloquent? 【发布时间】:2020-09-29 05:08:57 【问题描述】:

在尝试生成 API 响应时,我又一次遇到了这个问题

最基本的代码是这样的:

// This works, but its incomplete
Car::with(['user:id,name', 'factory', 'producer'])

// This does not work, ambiguous column names SQL error
Car::with(['user:id,name', 'factory:id,name', 'producer'])

我觉得这是 Eloquent 中的一个错误或需要改进的地方

【问题讨论】:

【参考方案1】:

好的,我知道如何快速做到这一点。

首先我发现这段代码有效:

 Car::with(['user' => function($q) 
     $q->selectRaw(DB::raw("users.id, users.name"));
 , 'factory' => function($q) 
     $q->selectRaw(DB::raw("factories.id, factories.name"));
 , 'producer'])

然后我想删除构建器的原始部分,我想知道这是否以类似的方式工作,所以我最终得到:

Car::with(['user:users.id,users.name', 'factory:factories.id,factories.name', 'producer'])

像魅力一样工作

【讨论】:

以上是关于如何使用 Laravel 的 eloquent 加载相同的列名?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 eloquent 在 laravel 中编写多个连接

如何使用 Laravel 4 Eloquent 连接列?

如何在 Laravel 5.8 中使用 Eloquent 进行查询?

如何在 Laravel/Eloquent 中获得完整的关系

如何在 laravel 5 中使用 Eloquent 更新数据透视表

如何使用 Laravel 的 eloquent 加载相同的列名?