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
}
Я не уверен, что происходит за сценой. Но как я могу получить ID в integer ? На самом деле, старый флеш заседании не установлено значение из-за 1 vs "1"
в форме коллективной.
{!! Form::select('alphabet', $alphabets, null, ['class' => 'form-control', 'multiple' => true]) !!}
5 ответов
попробуйте этот код
$alphabets = new Alphabet();
return $alphabets->all()->pluck('name', 'id');
алфавит.в 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
вы также конвертируете key в int
$alphabets = new Alphabet();
$alphaArr =$alphabets->pluck('name', 'id');
foreach($array as $key => $value) {
$newArray[(int) $key] = $value;
}
как правило, pluck()
метод дает ассоциативный массив значений
в строковых значениях.
Итак, попробуйте использовать select
такие утверждения:
$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;
}