使用 Laravel 4.2 和 MySQL。
我有一个包含 id
和 fit_score_id
列的 applications
表,以及一个包含id
列。这是一种基本的“属于”关系。
以下代码:
$query = Application::join('fit_scores', 'applications.fit_score_id', '=', 'fit_scores.id');
$collection = $query->get();
...生成 Application
模型的集合,其中 id
属性设置为 fit_score_id
的值。我在做什么导致了这种情况?
我应该指出,有必要执行此连接而不是简单地使用 Eloquent 关系,因为我想按 fit_scores
表上的列对结果进行排序。我不相信在没有显式连接的情况下使用 Eloquent 是不可能的。
最佳答案
解决此问题的最佳方法是将 join 方法链接到 select 方法,如下所示:
Application::select('*', \DB::raw("applications.id as appid"))
->join('fit_scores', 'applications.fit_score_id', '=', 'fit_scores.id')
->get();
解释:该解决方案简单地建议,我们可以 Hook 到主选择查询(在加入之前)并将 id 列的标签更改为其他内容,而不是考虑防止用加入的 id 覆盖第一个 id 的行为(在本例中为“appid”)。通过这样做,我们最终将父表的 ID 标记为“appid”,并将连接表的 ID 再次标记为“id”,同时它们在最终结果上共存。
关于php - 被连接覆盖的 ID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580874/