Pluck id (целое число), переданное в строку Laravel

Выбирая из базы данных, я получаю id как строки.

 $alphabets = new Alphabet(); return $alphabets->pluck('name', 'id'); 

Вывод

 { "1": "Apple", "2": "Ball", "3": "Cat" } 

ожидаемый

 { 1: "Apple", 2: "Ball", 3: "Cat" } 

Но, когда я меняю ID и name ,

 return $alphabets->pluck('id', 'name'); 

Я получаю id как целое.

 { "Apple": 1, "Ball": 2, "Cat": 3 } 

Я не уверен, что происходит за сценой. Но как я могу получить идентификатор в integer? На самом деле, старый сеанс flash не устанавливает значение из-за 1 vs "1" в Form Collective.

 {!! Form::select('alphabet', $alphabets, null, ['class' => 'form-control', 'multiple' => true]) !!} 

Related of "Pluck id (целое число), переданное в строку Laravel"

вы также конвертируете ключ в int

  $alphabets = new Alphabet(); $alphaArr =$alphabets->pluck('name', 'id'); foreach($array as $key => $value) { $newArray[(int) $key] = $value; } 

Попробуйте этот код

 $alphabets = new Alphabet(); return $alphabets->all()->pluck('name', 'id'); 

Alphabet.php

Вы должны использовать свои столбцы так.

  protected $casts = [ 'id' => 'integer', 'name' => 'string' ]; 

Кажется, я нашел ответ здесь.

https://laracasts.com/discuss/channels/laravel/pluck-id-integer-cast-to-string

Здесь я нашел, что JSON разрешает только имена клавиш.

Используя число как «индекс» (JSON)

 { "1": "Apple", "2": "Ball", "3": "Cat" } 

Вообще-то, я хочу добиться этого для Form Collective . Это была ошибка, и теперь PR был объединен.

https://github.com/LaravelCollective/html/pull/368#pullrequestreview-46820423

Обычно метод pluck() дает ассоциативный массив значений в строковых значениях.

Итак, попробуйте использовать следующие утверждения:

 $data = Alphabet::select('id','name')->get()->toArray(); 

Это даст вам следующий результат:

 array:3 [▼ 0 => array:2 [▼ "id" => 1 "name" => "Apple" ] 1 => array:2 [▼ "id" => 2 "name" => "Ball" ] 2 => array:2 [▼ "id" => 3 "name" => "Cat" ] ] 

Теперь, используя простой цикл, вы можете получить ожидаемый массив.

 $expected = array(); foreach($data as $d){ $expected[$d['name']] = $d['id']; } dd($expected); 

Добавление этой строки устраняет проблему старого сеанса LaravelCollective / Html.

|| in_array((string) $value, $selected, true)

 /** * Determine if the value is selected. * * @param string $value * @param string $selected * * @return null|string */ protected function getSelectedValue($value, $selected) { if (is_array($selected)) { return in_array($value, $selected, true) || in_array((string) $value, $selected, true) ? 'selected' : null; } elseif ($selected instanceof Collection) { return $selected->contains($value) ? 'selected' : null; } return ((string) $value == (string) $selected) ? 'selected' : null; }