$phone_Id = $request->get('q');
$colors = Phone::find($phone_Id)->color->toArray();
dd($colors);
array:2 [▼
0 => array:6 [▼
"id" => 8
"name" => "red"
"value" => "#fb6250"
"created_at" => "2019-05-29 01:42:51"
"updated_at" => "2019-05-29 01:42:51"
"pivot" => array:4 [▼
"phone_id" => 1
"color_id" => 8
"created_at" => "2019-05-29 01:42:51"
"updated_at" => "2019-05-29 01:42:51"
]
]
1 => array:6 [▼
"id" => 11
"name" => "blue"
"value" => "#202020"
"created_at" => "2019-05-29 01:42:51"
"updated_at" => "2019-05-29 01:42:51"
"pivot" => array:4 [▼
"phone_id" => 1
"color_id" => 11
"created_at" => "2019-05-29 01:42:51"
"updated_at" => "2019-05-29 01:42:51"
]
]
]
array:2 [▼
0 => array:2 [▼
"id" => 8
"text" => "red"
]
1 => array:2 [▼
"id" => 11
"text" => "blue"
]
]
$data = [];
foreach ($colors as $key => $val) {
$data[$key]['id'] = $val->id;
$data[$key]['text'] = $val->name;
}
dd($data);
array:2 [▼
0 => array:2 [▼
"id" => 8
"text" => "red"
]
1 => array:2 [▼
"id" => 11
"text" => "blue"
]
]
I want to know if there is a better and more beautiful implementation for this kind of demand in laravel?
Используйте select('id', 'name')
Попробуй это.
$colors = Phone::find($phone_Id)->color()->select('id', 'name')->get()->toArray()
dd($colors);
Метод ошибки Illuminate\Database\Eloquent\Collection::select не существует.
Отлично, этот код может применяться к родительской модели. ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ОТВЕТ ДЖОША выше stackoverflow.com/a/56370088/4551227
Метод @JesusErwinSuarez Illuminate\Database\Eloquent\Collection::select не существует. Потому что цвет нужно записывать как color()
Понятно, спасибо. Я только что понял разницу между цветом и цветом() цвет - переменная цвет() - экземпляр Если я не ошибаюсь.
В коллекции Laravel есть метод ->only()
и ->map()
, которые можно использовать следующим образом:
$colors = Phone::find($phone_Id)->color()->only(['id', 'name'])toArray();
$colors->map(function($color) {
$color->text = $color->name;
unset($color->text);
})
https://laravel.com/docs/5.8/collections#только метод
https://laravel.com/docs/5.8/collections#method-map
Привет, большое спасибо, php $colors = Phone::find($phone_Id)->color->only(['id', 'name']); dd($colors);
результат: shell Collection {#861 ▼ #items: [] }
Добро пожаловать @Angu. Если это был ответ, который вы ищете, вы можете сказать людям, что на него есть ответ, поставив галочку.
По вашим советам придумал самый простой способ. $colors = Phone::find($phone_Id)->color()->get(['id', 'имя как текст'])->toArray();
Извините, коллекция пуста, потому что вам нужно написать цвет как color()
Большое спасибо, ваш метод действительно дает эффект.
$colors = Phone::find($phone_Id)->color;
$colors->transform(function ($color) {
return [
'id' => $color->id,
'text' => $color->name,
];
});
Редактировать: спасибо за правильный ответ и голоса, но я хотел бы отметить, что ОП пришел к гораздо более элегантному решению, используя построитель запросов ->get(..)
и переименовав столбцы:
$colors = Phone::find($phone_Id)->color()->get(['id', 'name as text'])->toArray();
Спасибо большое, я придумал более простой способ. php $colors = Phone::find($phone_Id)->color()->get(['id', 'name as text'])->toArray();
Для реализации требуется всего лишь кусок кода
О, хорошо, да, это элегантно
Я могу ошибаться, однако она, кажется, использует отношение к результатам поиска, что означает, что метод
->select()
недоступен.