Выбирая из базы данных, я получаю 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]) !!}
вы также конвертируете ключ в 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; }