Одна из таблиц в БД имеет две связи к другой таблице
Alleles: G, A
Genotypes: G/A, A/A, G/G
Как описать связь, чтобы получить сразу две части генотипа.
Genotypes.php
public function left_allele()
{
return $this->belongsTo('App\Allele', 'l_allele_id', 'id');
}
public function right_allele()
{
return $this->belongsTo('App\Allele', 'r_allele_id', 'id');
}
Теперь можно получить левую и правую часть отдельно. Пример для tinker:
$genotype = App\Genotype::first();
$genotype->left_allele; //G
$genotype->right_allele; //A
Можно ли как-то описать связь, чтобы получить сразу обе части? Связь, например, all_alleles?
Попробуй такой запрос
$allAlleles = (new App\Genotype())
->from((new App\Genotype())->getTable() . ' as g')
->select(['a.*'])
->leftJoin((new App\Allele())->getTable() . ' as a', function ($join) {
$join->on('g.l_allele_id', '=', 'a.id');
$join->orOn('g.r_allele_id', '=', 'a.id');
})
->first();
Через Left Join вытаскиваешь записи по совпадающим l_allele_id и r_allele_id
Сборка персонального компьютера от Artline: умный выбор для современных пользователей