Отношения HasManyThroug возвращает ошибку SQL - PullRequest
0 голосов
/ 15 октября 2019

Я работаю на внутренней PMS, где у меня есть четыре модели: User, Company, Client и Project.

Один Company будет иметь несколько Users,и через Company, User будет иметь доступ ко многим Clients и Projects. Ничего особенного, просто классическая PMS с компанией, клиентами, пользователями и проектами.

Модель User имеет поле company_id (в данный момент один пользователь может быть связан только с одной компанией). Модель Client также имеет поле company_id. С этим я думал, что у меня может быть HasManyThrough отношение для User и Client, и я попробовал это:

public function clients()
{
    return $this->hasManyThrough( Client::class, Company::class );
}

Однако, это возвращает

SQLSTATE[HY000]: общая ошибка: 1 нет такого столбца: companies.user_id (SQL:

select "clients".*, "companies"."user_id" as "laravel_through_key" 
from "clients" 
inner join "companies" 
    on "companies"."id" = "clients"."company_id" 
where "companies"."user_id" = 1 
  and "clients"."deleted_at" is null

В моей базе данных companies.user_id не существует, поскольку это отношение определяется users.company.id. Было бы лучше написать необработанный запрос SQL?

1 Ответ

1 голос
/ 15 октября 2019

Или может просто использовать два отношения как:

// User Model
[.....]
public function company()
{
    return $this->belongsTo( Company::class, [YOUR_FK_HERE] );
}

public function clients()
{
    return $this->company->clients();
}
[....]

и в модели компании

// Company Model
[....]
public function clients()
{
    return $this->hasMany( Client::class, [YOUR_FK_HERE] );
}
[....]
...