Laravel имеет много сквозных полиморфных - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть три модели: Пользователь, Контакт и VerifyContact со следующими отношениями:

Модель пользователя:

public function contacts()
{
    return $this->morphOne('App\Contact', 'contactable');
}

public function contact_verifications()
{
    return $this->hasManyThrough(VerifyContact::class, Contact::class, 'contactable_id', 'user_id', null, 'contactable_id');
} 

Модель контакта:

public function contactable()
{
    return $this->morphTo();
}

public function verifications(){
    return $this->hasMany('App\VerifyContact');
}

И Я получаю подтвержденные контакты следующим образом:

User::find($id)->first()->contact_verifications

Запрос на проверку проверенных контактов выглядит следующим образом:

SELECT     `verify_contacts`.*, 
           `contacts`.`contactable_id` AS `laravel_through_key` 
FROM       `verify_contacts` 
INNER JOIN `contacts` 
ON         `contacts`.`contactable_id` = `verify_contacts`.`user_id` 
WHERE      `contacts`.`contactable_id` = ? [9]

Возвращает одинаковые проверенные контакты для всех пользователей. Как изменить contact_verifications() для получения правильных результатов? Первая запись в таблице users имеет идентификатор 9.

...