我是laravel的新人,我面临着与人际关系的问题。我有三张桌子。
asset assetmaintenance users id id id name asset_id name inspector_id(users_id) name
我想通过assetmaintenance
访问所有附加资产的用户,所以我在资产模型中定义关系,如:
public function users(){ return $this->hasManyThrough(TenantUser::class,AssetMaintenance::class,'asset_id','id'); }
但是由eloquent生成的查询与我的预期不同:
select * from `assets` where exists (select * from `users` inner join `assets_maintenance` on `assets_maintenance`.`id` = `users`.`id` where `assets`.`id` = `assets_maintenance`.`asset_id` and `username` like ?) and `isDeleted` = ? order by `id` desc
我想要像assets_maintenance.inspector_id= users.id
这样的关系,但它正在比较assets_maintenance.id = user.id
。
请建议......
尝试使用以下代码:
public function users(){
return $this->hasManyThrough(TenantUser::class, AssetMaintenance::class, 'inspector_id', 'id');
}
并尝试使用其他参数
好的,试试这种方式
首先,在资产模型中为hasMany资产维护创建一个方法,然后在模型中为hasOne检查器id创建另一个方法,并在一个查询中使用以下代码获取所有这些数据。
Assets::with('assetmaintenance','assetmaintenance.user')->get()