web-dev-qa-db-de.com

ID (Ganzzahl) in Zeichenfolge umwandeln Laravel

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

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.

Mit Nummer als "Index" (JSON)

{
    "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

3
Sagar Chamling

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' 
  ];
5

sie konvertieren auch Schlüssel in int

 $alphabets = new Alphabet();
    $alphaArr =$alphabets->pluck('name', 'id');
    foreach($array as $key => $value) {
       $newArray[(int) $key] = $value;
    }
1

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;
}
0
Sagar Chamling

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);
0
Sagar Gautam