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

时间:2017-06-28 10:49:26

标签: php json forms laravel pluck

从数据库中提取时,我将id作为字符串。

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

输出

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

预期

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

但是,当我撤消IDname时,

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]) !!}

5 个答案:

答案 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;
}