Я использую RAW Query в Laravel. Потому что это немного сложно сделать с помощью построителя запросов или Eloquent.
Я запрашиваю базу данных на 1 человека, используя где на его имя.
Возвращаемый результат — массив с объектом в нем.
(см. скриншот)
return $data['person'] = DB::select(DB::raw($person))[0];
что дает мне следующую ошибку:
Содержимое Ответа должно быть строкой или объектом, реализующим __toString (), заданный «объект».
return $data['person'] = DB::select(DB::raw($person))->first();
что говорит мне, что сначала не применимо для этого вида запроса ..
SELECT nickname, firstname, lastname, age, title, photo, companies.name, cities.name, trickshot
FROM persons
JOIN companies ON companies.id = persons.company_id
JOIN cities ON cities.id = companies.city_id
WHERE CONCAT(firstname, lastname) = '{$fullname}' AND cities.name = '{$city}'
Спасибо!
Вот как вы делаете это в Eloquent, если Person
модель вам нужна:
Person::select( ... , 'comp.name as company', 'cit.name as city')
->join('companies as comp', 'comp.id', '=', 'persons.company_id')
->join('cities as cit', 'cit.id', '=', 'comp.city_id')
->where('cit.name', $city)
->where(DB::raw('concat(firstname, lastname)'), $fullname)
->first();
Если вам нужен этот набор данных чаще, я бы вместо этого создал представление БД для этого.
Других решений пока нет …