Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Есть таблица goods и photos. Эти таблицы связаны между собой отношением один ко многим. То есть у одного good может быть много photo. Мне нужно сделать выборку всех good, сразу вместе с со всеми связанными photo. Также нужно выбрать значения не всех полей, а только нужных. И сделать это надо как в товарах, так и в фотографиях. Нужно, чтобы получился такой результат:
array:1 [
0 => array:3 [
"id" => 22997
"name" => "Дроссельная заслонка, TOYOTA, -, 2AZ, Конт., (механич.)"
"photos" => array:2 [
0 => array:8 [
"file_name_1920" => "1920_beab058e9f965a26ca597c3a2d5fad85.jpg"
]
1 => array:8 [
"id" => 14
"file_name_1920" => "1920_ae27f461ea19678d07151993e6a30811.jpg""
]
]
]
]
Делаю выборку вот так:
$goods = Good::where('quantity', '>', 0)
->select(
[
'id',
'name',
])
->with(['photos' => function($q)
{
$q->select('id', 'file_name_1920');
}])
->orderBy('id', 'desk')->take(1)->get();
dump($goods->toArray());
В результате получаю выборку без фотографий:
array:1 [
0 => array:3 [
"id" => 22997
"name" => "Дроссельная заслонка, TOYOTA, -, 2AZ, Конт., (механич.)"
"photos" => []
]
]
А если делаю выборку вот так:
$goods = Good::where('quantity', '>', 0)
->select(
[
'id',
'name',
])
->with(['photos' => function($q)
{
//$q->select('id', 'file_name_1920');
}])
->orderBy('id', 'desk')->take(1)->get();
dump($goods->toArray());
То получаю все вместе с good получаю все photos, но вместе с ненужными полями:
array:1 [
0 => array:3 [
"id" => 22997
"name" => "Дроссельная заслонка, TOYOTA, -, 2AZ, Конт., (механич.)"
"photos" => array:2 [
0 => array:8 [
"id" => 13
"sorting" => 0
"good_id" => 22997
"publish" => 1
"file_name_1920" => "1920_beab058e9f965a26ca597c3a2d5fad85.jpg"
"file_name_fit_640" => "fit_640_beab058e9f965a26ca597c3a2d5fad85.jpg"
"created_at" => "2016-10-19 18:23:47"
"updated_at" => "2016-10-19 18:23:47"
]
1 => array:8 [
"id" => 14
"sorting" => 0
"good_id" => 22997
"publish" => 1
"file_name_1920" => "1920_ae27f461ea19678d07151993e6a30811.jpg"
"file_name_fit_640" => "fit_640_ae27f461ea19678d07151993e6a30811.jpg"
"created_at" => "2016-10-19 18:23:49"
"updated_at" => "2016-10-19 18:23:49"
]
]
]
]
Что я делаю не так?
1. ->orderBy('id', 'desk')->take(1)->get();
достаточно ->orderBy('id', 'desk')->first();
2. попробуй в модели в guard запихать поля, которые не хочешь светить во вне. а можно в hidden запихать.
вот чёрт, а не помню в каком состоянии они нередектируемы...
имеется ввиду, что это необходимо сделать внутри конкретной модели путём редактирования соответствующих свойств.
Не в сети
>> попробуй в модели в guard запихать поля
guard совсем не то - это защита от массового заполнения
тут скорее всего надо hidden - но он только для отдачи в json. В самом объекте эти поля будут.
Не в сети
>> попробуй в модели в guard запихать поля
guard совсем не то - это защита от массового заполнения
тут скорее всего надо hidden - но он только для отдачи в json. В самом объекте эти поля будут.
так ему и надо их от выдачи спрятать - это самое дешёвое решение.
а ко ли таблица шириной не 40 колонок, то заморачиваться на этом этапе вырезанием из запроса матрёшек нет смысла, но это пока не 40 колонок в таблице...
Изменено hzone (24.10.2016 12:14:40)
Не в сети