我根据Models
有两个表Cars
和cars.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属性来覆盖它 惯例。同样,您可以定义要覆盖的连接属性 使用时应使用的数据库连接的名称 模特。
答案 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']);
这将在模型表上运行子查询,让您不必担心密钥。