Laravel有很多直通关系无法正常工作

时间:2019-02-28 12:31:07

标签: php laravel eloquent has-many-through eloquent--relationship

我是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');
    }

但是雄辩生成的查询与我期望的不同:

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

请建议...

2 个答案:

答案 0 :(得分:1)

尝试以下代码:

public function users(){
    return $this->hasManyThrough(TenantUser::class, AssetMaintenance::class, 'inspector_id', 'id');
}

并尝试使用其他参数

更多 Laravel Has-Many-Through Relationship

答案 1 :(得分:0)

可以尝试这种方式

首先,在资产模型中为hasMany资产维护创建一个方法,然后在模型中为hasOne inspector_id创建另一个方法,并使用以下代码在一个查询中获取所有这些数据。

Assets::with('assetmaintenance','assetmaintenance.user')->get()