从数据库中提取时,我将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?实际上,由于Form Collective中的1 vs "1"
,旧的flash会话没有设置值。
{!! Form::select('alphabet', $alphabets, null, ['class' => 'form-control', 'multiple' => true]) !!}
答案 0 :(得分:5)
试试此代码
ITEM(new Func() {
@Override public exec(Integer i, String somethingElse) {
StaticMethodClass.IDK(i, somethingElse);
}
});
Alphabet.php
你应该像这样投射你的列。
$alphabets = new Alphabet();
return $alphabets->all()->pluck('name', 'id');
答案 1 :(得分:3)
我想我在这里找到了答案。
https://laracasts.com/discuss/channels/laravel/pluck-id-integer-cast-to-string
在这里,我发现JSON只允许键名为字符串。
Using number as "index" (JSON)
{
"1": "Apple",
"2": "Ball",
"3": "Cat"
}
实际上,我想为Form Collective
实现它。这是一个错误,它的公关已经合并了。
https://github.com/LaravelCollective/html/pull/368#pullrequestreview-46820423
答案 2 :(得分:1)
您还将密钥转换为int
$alphabets = new Alphabet();
$alphaArr =$alphabets->pluck('name', 'id');
foreach($array as $key => $value) {
$newArray[(int) $key] = $value;
}
答案 3 :(得分:0)
通常,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);
答案 4 :(得分:0)
添加此行可修复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;
}