#laravel #eloquent #eloquent-relationship
#laravel #красноречивый #красноречивая связь
Вопрос:
Я не могу ломать голову, как создать связь, которая предполагает наличие двух записей одной и той же модели в другой таблице. Я пытаюсь вести учет приобретений компаний (M amp; A) в определенной географии, и для этого мне нужно вести учет приобретателя и приобретенного, оба из которых у меня могут быть или не быть в нашей таблице компаний.
Вот простой пример:
ABC приобретает XYZ
Таблица сбора
acquirer | acquired | type | acquirer_id | acquiree_id
ABC XYZ acquisition 34 58
Таблица компании
id | name | slug
34 | ABC | abc
58 | XYZ | xyz
Я не совсем уверен, что это хороший подход, но я хотел бы иметь возможность отображать данные о получении в обоих профилях.
Например: в профиле ABC мы показываем, что ABC приобрела XYZ, а в профиле XYZ мы показываем, что XYZ был приобретен ABC. Мне нужно будет получить slug компании (если компания существует), чтобы я мог ссылаться на нее при показе приобретения.
Ответ №1:
Я не уверен, отвечает ли это на вашу проблему. Вы можете объявить две связи в своей модели сбора данных.
public function acquirerCompany() {
return $this->belongsTo(Company::class, 'acquirer_id');
}
public function acquireeCompany() {
return $this->belongsTo(Company::class, 'acquiree_id');
}
Теперь, если вы хотите получить компанию slug:
// acquierer
$acquisition->acquirerCompany->slug;
// acquieree
$acquisition->acquireeCompany->slug;