Одна из таблиц в БД имеет две связи к другой таблице
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
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники