У Laravel есть Много через отношения, не работающие - PullRequest
0 голосов
/ 28 февраля 2019

Я новичок в 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 голосов
/ 28 февраля 2019

Хорошо, попробуйте этот способ

, сначала создайте метод в модели активов для hasMany assetmaintenance, а затем после создания другого метода в модели для hasOne inspector_id и извлеките все эти данные в одном запросе, используя приведенный ниже код.

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

0 голосов
/ 28 февраля 2019

Попробуйте с помощью приведенного ниже кода:

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

А также попробуйте с дополнительными параметрами

Для более Отношения Laravel Has-Many-Through

...