使用Laravel 4.2&的MySQL。
我有一个applications
表,其中包含id
和fit_score_id
列,以及一个fit_scores
表,其中包含id
列。它是一个基本的"属于"关系。
以下代码:
$query = Application::join('fit_scores', 'applications.fit_score_id', '=', 'fit_scores.id');
$collection = $query->get();
...生成Application
个模型的集合,id
属性设置为fit_score_id
的值。我在做什么导致这个?
我应该注意,有必要进行这种连接而不是简单地使用雄辩的关系,因为我想要通过fit_scores
表上的列来排序结果。我不相信在没有明确加入的情况下使用Eloquent是可能的。
答案 0 :(得分:2)
解决此问题的最佳方法是将 join 方法链接到 select 方法,如下所示:
Application::select('*', \DB::raw("applications.id as appid"))
->join('fit_scores', 'applications.fit_score_id', '=', 'fit_scores.id')
->get();
说明:该解决方案只是建议,与其考虑防止防止使用连接的id覆盖第一个id的行为,我们还可以连接到主选择查询(在连接之前)并将id列的标签更改为其他内容(在这种情况下为“ appid”)。这样,我们最终将父表的ID标记为“ appid”,并将联接表的ID再次标记为“ id”,同时它们一起存储在最终结果中。
答案 1 :(得分:0)
我能够使用这个答案找到一个可能的解决方案:
Laravel 4 - JOIN - Same column name
基本上,由于Laravel不会为连接表自动为table_name.
添加列名称,我们需要通过别名连接中的任何冲突列名来手动处理它。将此select语句添加到我的查询中就可以了:
->select(DB::raw("applications.*, fit_scores.*, applications.id as id"))
答案 2 :(得分:0)
这取决于你需要什么,但可能你可以使用急切加载来实现它。如果你需要混合连接和急切加载检查这一点。 http://www.jmilan.net/posts/eager-loading-joins-in-laravel