Laravel двойная связь в модели

258
28 апреля 2018, 17:13

Одна из таблиц в БД имеет две связи к другой таблице

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?

Answer 1

Попробуй такой запрос

$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

READ ALSO
Создание gif анимаций на PHP

Создание gif анимаций на PHP

Есть ли библиотека(и), создающие Gif анимации на php? Например, создание фигур с анимацией их перемещения, плавная анимация показа изображений,...

186
Перевод функции на php

Перевод функции на php

Святослав Семеркин: Есть такая функция на Пыхе, очень хочу получить её Си или Go вариантЧтобы это не выглядело тупо "сделайте за меня", подскажите...

202
Как вывести данные постраничнно?

Как вывести данные постраничнно?

Всем привет подскажите как вывести постраничнно в файлах просто строки нужно посчитать строки отдельного файла и вывести суму всех файлов...

166
Подмена ответа со стороны сервера - как обойти?

Подмена ответа со стороны сервера - как обойти?

Пытаюсь с помощью file_get_contents получить изображение с удаленного сервера в переменную, но мне пишет что

185