Id列被加入

时间:2015-06-01 18:43:34

标签: php mysql laravel laravel-4 eloquent

使用Laravel 4.2&的MySQL。

我有一个applications表,其中包含idfit_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是可能的。

3 个答案:

答案 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