Beim Zupfen aus einer Datenbank erhalte ich id
als Zeichenfolge.
$alphabets = new Alphabet();
return $alphabets->pluck('name', 'id');
Ausgabe
{
"1": "Apple",
"2": "Ball",
"3": "Cat"
}
Erwartet
{
1: "Apple",
2: "Ball",
3: "Cat"
}
Aber wenn ich ID
und name
umkehre,
return $alphabets->pluck('id', 'name');
Ich erhalte die ID als Ganzzahl.
{
"Apple": 1,
"Ball": 2,
"Cat": 3
}
Ich bin mir nicht sicher, was hinter den Kulissen passiert. Aber wie kann ich ID in Integer bekommen? Tatsächlich wird in einer alten Flash-Sitzung aufgrund von 1 vs "1"
in Form Collective kein Wert festgelegt.
{!! Form::select('alphabet', $alphabets, null, ['class' => 'form-control', 'multiple' => true]) !!}
Ich glaube, ich habe hier die Antwort gefunden.
https://laracasts.com/discuss/channels/laravel/pluck-id-integer-cast-to-string
Hier habe ich festgestellt, dass JSON nur erlaubt, dass Schlüsselnamen Zeichenfolgen sind.
{
"1": "Apple",
"2": "Ball",
"3": "Cat"
}
Eigentlich möchte ich es für Form Collective
erreichen. Es war ein Fehler und die PR wurde jetzt zusammengeführt.
https://github.com/LaravelCollective/html/pull/368#pullrequestreview-46820423
Versuchen Sie diesen Code
$alphabets = new Alphabet();
return $alphabets->all()->pluck('name', 'id');
Alphabet.php
Sie sollten Ihre Spalten so gießen.
protected $casts = [
'id' => 'integer',
'name' => 'string'
];
sie konvertieren auch Schlüssel in int
$alphabets = new Alphabet();
$alphaArr =$alphabets->pluck('name', 'id');
foreach($array as $key => $value) {
$newArray[(int) $key] = $value;
}
Durch Hinzufügen dieser Zeile wird das alte Sitzungsproblem von LaravelCollective/Html behoben.
|| 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;
}
Normalerweise gibt Ihnen die Methode pluck()
ein assoziatives Array von Werten in Zeichenfolgenwerten.
Versuchen Sie also, select
Anweisungen wie diese zu verwenden:
$data = Alphabet::select('id','name')->get()->toArray();
Dies ergibt folgendes Ergebnis:
array:3 [▼
0 => array:2 [▼
"id" => 1
"name" => "Apple"
]
1 => array:2 [▼
"id" => 2
"name" => "Ball"
]
2 => array:2 [▼
"id" => 3
"name" => "Cat"
]
]
Mit der einfachen Schleife können Sie jetzt Ihr erwartetes Array erhalten.
$expected = array();
foreach($data as $d){
$expected[$d['name']] = $d['id'];
}
dd($expected);