Красноречивая многорядная связь с Laravel

#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;