Laravel - щипать с указанными ключами - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть строка кода, подобная следующей:

Sport::pluck('id', 'name)

Я имею дело с интерфейсом JavaScript, который ожидает список в этом формате:

var list = [
 { text: 'Football', value: 1 },
 { text: 'Basketball', value: 2 },
 { text: 'Volleyball', value: 3 }
 ...
]

Я пытаюсьвыяснить, как я могу каким-то образом преобразовать значения id и name, которые я извлекаю из своей модели, в формат, похожий на Javascript list.

Если это неясно, я надеюсь закончить сассоциативный массив, который содержит два ключа: text и value, где text представляет поле name в моей модели и где value представляет id модели - надеюсь, это имеет смысл.

Как бы я подошел к этому?

Сначала я попробовал что-то подобное (без проверки документации)

Sport::pluck(["id" => "value", "name" => "text]);

Но это не так, как вы это делаете, чтосейчас вполне понятно.Я также попробовал некоторый фрагмент кода, связанный с картой, который я не могу, кажется, Ctrl-z.

Есть предложения?

Ответы [ 4 ]

1 голос
/ 10 апреля 2019

Вы можете использовать карту. (https://laravel.com/docs/5.8/collections#method-map)

$mapped = Sport::all()->map(function($item, $index) {
 return [
   "id" => $item["id"],
   "name" => $item["text"]
 ];
});

Это самый простой способ. На самом деле Laravel предлагает лучший способ для этого. Вы можете использовать ресурсы API для преобразования ваших данных из eloquent для внешнего интерфейса: https://laravel.com/docs/5.8/eloquent-resources

0 голосов
/ 26 июня 2019

Другой метод заключается в использовании map->only():

Sport::all()->map->only('id', 'name');
0 голосов
/ 11 апреля 2019

Цель pluck не в том, что вы намереваетесь делать,

Пожалуйста, посмотрите на приведенные ниже примеры,

Sport::selectRaw("id as value, name as text")->pluck("text","value");
// ['1' => 'Football', '2'=>'BasketBall','3'=>'Volleyball',...]

Синтаксис

$plucked = $collection->pluck('name', 'product_id');
// ['prod-100' => 'Desk', 'prod-200' => 'Chair']

Пожалуйста, смотрите документацию .

Ваш вывод возможен с использованием простого кода.

Sport::selectRaw('id as value, name as text')->get();
0 голосов
/ 11 апреля 2019

Попробуйте с toArray функцией:

Sport::pluck('id', 'name)->toArray();

Затем вы можете вернуть свой результат с помощью json_encode php function;

...