Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет. Есть 2 таблицы: home_items и home_item_translations. Как вы, наверно, поняли, 2-ая зависит от 1-го. Чтобы сделать запрос вида:
SELECT
home_items.alias,
home_item_translations.text
FROM
home_items
LEFT JOIN home_item_translations on home_item_translations.home_item_id = home_items.id
... мне нужно записать:
$homeItem = HomeItem->get();
echo $homeItem[0]->alias;
echo $homeItem[0]->text;
echo $homeItem[1]->alias;
echo $homeItem[1]->text;
//...
При обращении к text делается запросна базу. В результате получается больше одного запроса, хотя, мне кажется, можно обойтись только одним.
P.S.
Версия Laravel 5.2
Версия PHP 7.0
ПОдскажите пожалуйста, как можно сделать вышеприведенный запрос в Laravel
Не в сети
Как-то у вас все сложно. Не совсем понятно конечная задача, но подход такой:
1. Создайте 2 модели HomeItem, HomeItemTranslate
2. Создайте в них связи: В модели HomeItem:
public function translations() {
return $this->hasMany(HomeItemTranslate::class);
}
В HomeItemTranslate:
public function homeItem() {
return $this->belongsTo(HomeItem::class);
}
4. В контроллере делайте выборку: $homeItem = HomeItem::with('translations')->find(1). Если нужно изменить респонс, используйте к примеру Laravel API Resources, fractal или написать класс в который трансформирует в нужный вам ответ.
Если вам нужно сохранить тогда: $homeItem = HomeItem::find(1); $hoteItem->translations()->create(array $translations).
Предположу что translations нужно постоянно отдавать, поэтому в модели можно сделать $with = ['translations']
Изменено andrei24 (28.10.2017 15:18:56)
Не в сети
В контроллере делайте выборку: $homeItem = HomeItem::with('translations')->find(1).
ваши варианты берут только один и делают при этом 2 запроса.
решил использовать
->join('home_item_translations','home_item_translations.home_item_id','=','home_items.id')
Не в сети
Страницы 1