Laravel имеет много через полиморфное отношение - PullRequest
0 голосов
/ 31 октября 2018

У меня есть таблица с транзакциями, где каждый Transaction принадлежит либо Driver, либо Customer - поэтому я устанавливаю полиморфную связь между ними.

Для транзакции я установил:

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

Для водителя и клиента:

public function transactions() {
    return $this->morphMany(Transaction::class, 'owner');
}

Но каждый драйвер также принадлежит к Company. И я пытаюсь получить все транзакции, которые относятся к отношениям Company - hasManyThrough:

public function transactions() {
    return $this->hasManyThrough(Transaction::class, Driver::class);
}

Но, похоже, он не работает с полиморфными отношениями, поскольку выдает ошибку, поскольку пытается найти поле driver_id в таблице transactions.

Как получить все транзакции, принадлежащие Компании, через ее драйверы?

1 Ответ

0 голосов
/ 31 октября 2018

Укажите пользовательский внешний ключ и добавьте ограничение для столбца owner_type:

public function transactions() {
    return $this->hasManyThrough(Transaction::class, Driver::class, null, 'owner_id')
        ->where('owner_type', Driver::class);
}

Без ограничения вы получите транзакции разных владельцев с одинаковым id.

...