#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. привет, он правильный и такой же, как первый. спасибо за это 🙂