Laravel关系查询返回相关的ID而不是main

时间:2014-04-29 13:29:57

标签: mysql laravel eloquent

我根据Models有两个表Carscars.model_id = model.id相关联。 汽车 belongsTo 模型模型 hasMany 汽车

如果我想根据Model表格中的cars名称进行搜索,请执行以下查询:

Car::join('models', 'cars.model_id', '=', 'models.id)
   ->where('models.name', 'like', '%'.$term.'%')
   ->paginate($_ENV['ITEMS_PER_PAGE']);

我的问题是,在这种情况下,Laravel的Eloquent ORM将model.id作为主要id返回,因此resultset将model.id作为Id而不是Car.id.有什么解决方案吗?

根据Laravel的文档,我认为Eloquent会在没有任何帮助的情况下正确地假设表格ID:

  

注意:Eloquent还会假设每个表都有一个主键   列名为id。您可以定义primaryKey属性来覆盖它   惯例。同样,您可以定义要覆盖的连接属性   使用时应使用的数据库连接的名称   模特。

1 个答案:

答案 0 :(得分:1)

如果您不需要它们,请不要SELECT id或没有任何模型字段(where子句无论如何都会有效)

Car::join('models', 'cars.model_id', '=', 'models.id')
 ->where('models.name', 'like', '%'.$term.'%')
 ->paginate($_ENV['ITEMS_PER_PAGE'], ['cars.*','models.fieldsYouNeedOrNothing']);

旁注:如果您真的不需要加入表格的字段,可以使用whereHas()代替联接,以更“雄辩”的方式:

Car::whereHas('models', function ($q) use ($term) {
   $->where('models.name', 'like', '%'.$term.'%');
})->paginate($_ENV['ITEMS_PER_PAGE']);

这将在模型表上运行子查询,让您不必担心密钥。