Несколько внешних ключей Laravel получают определенное значение с помощью querybuilder

#php #mysql #laravel

Вопрос:

У меня есть таблица контрактов, и вот пример данных

 id     spec1        spec2          spec3
1        2            4              3
 

И я получил другую таблицу спецификаций, и значения

 id       text
1        hello
2        hi
3        hola
4        yow
 

как я могу получить текст из таблицы спецификаций? нужно ли мне их многократно объединять?
я хочу что-то вроде

 {
 contract.id: 1,
 spec1: hello,
 spec2: yow,
 spec3: hola,
}
{
 contract.id: 2,
 spec1: hello,
 spec2: yow,
 spec3: hola,
}
 

я выбираю из таблицы контрактов

Я пытался

       DB::table('contracts as c')
            ->join('spec','spec.id','c.spec1')
            ->join('spec','spec.id','c.spec2')
            ->join('spec','spec.id','c.spec3')
            ->get();
 

но это неправильно и содержит некоторые ошибки. Заранее спасибо за помощь.

Комментарии:

1. Привет @Patas, можешь поделиться ошибками, с которыми ты столкнулся? Спасибо

2. да. на самом деле у меня нет ошибок. он возвращает пустой результат @MarcelloPerri

Ответ №1:

попробуйте приведенный ниже код:

  DB::table('contracts')->select('contracts.id','a.text AS spec1','b.text AS spec2','c.text AS spec3')
    ->leftJoin('specs AS a', 'a.id', 'contracts.spec1')
    ->leftJoin('specs AS b', 'b.id', 'contracts.spec2')
    ->leftJoin('specs AS c', 'c.id', 'contracts.spec3')
    ->get();
 

Документация MySQL

Прочитайте этот вопрос

Ответ №2:

 DB::table('contracts as c')
        ->leftjoin('spec as s1', 's1.id', '=', 'c.spec1')
        ->leftjoin('spec as s2', 's2.id', '=', 'c.spec2')
        ->leftjoin('spec as s3', 's3.id', '=', 'c.spec3')
        ->select('c.id as contract.id', 's1.text as spec1', 's2.text as spec2', 's3.text as spec3')
        ->get();
 

Дайте мне знать результаты.

Комментарии:

1. привет, он правильный и такой же, как первый. спасибо за это 🙂