Pluck id(整数)强制转换为字符串Laravel

Sag*_*ing 8 php forms json laravel pluck

从数据库中提取时,我得到id了字符串.

$alphabets = new Alphabet();
return $alphabets->pluck('name', 'id');
Run Code Online (Sandbox Code Playgroud)

产量

{
    "1": "Apple",
    "2": "Ball",
    "3": "Cat"
}
Run Code Online (Sandbox Code Playgroud)

预期

{
    1: "Apple",
    2: "Ball",
    3: "Cat"
}
Run Code Online (Sandbox Code Playgroud)

但是,当我扭转IDname,

return $alphabets->pluck('id', 'name');
Run Code Online (Sandbox Code Playgroud)

我得到id为整数.

{
    "Apple": 1,
    "Ball": 2,
    "Cat": 3
}
Run Code Online (Sandbox Code Playgroud)

我不确定幕后发生了什么.但是我如何获得整数ID?实际上,旧的flash会话因为1 vs "1"Form Collective 而没有设置值.

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

Dha*_*lia 5

试试这个代码

$alphabets = new Alphabet();
return $alphabets->all()->pluck('name', 'id');
Run Code Online (Sandbox Code Playgroud)

Alphabet.php

你应该像这样投射你的列.

  protected $casts = [
    'id' => 'integer',
    'name' => 'string' 
  ];
Run Code Online (Sandbox Code Playgroud)


Sag*_*ing 3

我想我在这里找到了答案。

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

这里我发现JSON只允许键名是字符串。

使用数字作为“索引”(JSON)

{
    "1": "Apple",
    "2": "Ball",
    "3": "Cat"
}
Run Code Online (Sandbox Code Playgroud)

事实上,我想实现它Form Collective。这是一个错误,现在它的 PR 已被合并。

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