Ich habe eine große SQL-Anweisung, die ich wie folgt ausführe:
$result = DB::select($sql);
Zum Beispiel
$result = DB::select('select * from users');
Ich möchte, dass das Ergebnis ein Array ist - aber im Moment gibt es eine Struktur zurück, wie ein Array mit Objekten ...
Array
(
0 => stdClass::__set_state(array(
'id' => 1,
'first_name' => 'Pavel',
'created_at' => '2015-02-23 05:46:33',
)),
1 => stdClass::__set_state(array(
'id' => 2,
'first_name' => 'Eugene',
'created_at' => '2016-02-23 05:46:34',
)),
...etc...
)
Es scheint, als müssten Sie die stdClass-Objekte als Array umwandeln, damit Sie die gewünschte Struktur haben
$result = array_map(function ($value) {
return (array)$value;
}, $result);
Die beste Lösung für die Leistung wäre eine Methode, wie Daten aus der Datenbank abgerufen werden:
// get original model
$fetchMode = DB::getFetchMode();
// set mode to custom
DB::setFetchMode(\PDO::FETCH_ASSOC);
// get data
$result = DB::select($sql);
// restore mode the original
DB::setFetchMode($fetchMode);
Wenn Sie alle Daten als Array erhalten möchten, reicht es aus, in config/database.php
von:
'fetch' => PDO::FETCH_CLASS,
in
'fetch' => PDO::FETCH_ASSOC,
und dann nur laufen:
$result = DB::select($sql);
gibt Ihnen ein mehrdimensionales Array anstelle eines Arrays von Objekten zurück
toArray()
Methode konvertiert die Sammlung in ein Array. Modelle werden auch in Arrays konvertiert:
Die
toArray
-Methode konvertiert die Auflistung in ein einfaches PHP - Array . Wenn die Werte der SammlungEloquent
Modelle sind, werden auch die Modelle in Arrays umgewandelt werden
Ich denke, du machst etwas falsch. Wenn Sie weitere Hilfe benötigen, aktualisieren Sie Ihre Frage bitte mit dem zugehörigen Code.
Außerdem haben nur Eloquent-Sammlungen (Modelle) die toArray()
-Methode.
Um diese Methode zu verwenden, verwenden Sie Eloquent:
$result = \App\User::all()->toArray();
Für Laravel/Lumen 5.4 (bei der Beleuchtung/Datenbank 5.4 verwendet wird):
$pdo = DB::getPdo();
$statement = $pdo->prepare($yourQuery);
$statement->setFetchMode(\PDO::FETCH_ASSOC);
$statement->execute();
$results = $statement->fetchAll();
Oder das Illuminate\Database\Events\StatementPrepared-Ereignis anhören: Laravel 5.4 - Wie wird der PDO-Abrufmodus eingestellt?
Hier ist ein weiterer Ansatz, der es wert ist, erwähnt zu werden:
$resultArray = json_decode(json_encode($result), true);
Es funktioniert, ich habe nachgesehen.
Versuche dies
$result = DB::select($sql);
$arr = [];
foreach($result as $row)
{
$arr[] = (array) $row;
}
Sie können diesen Weg machen ..
Oben
use DB;
use PDO;
--------------------
DB::setFetchMode(PDO::FETCH_ASSOC); // Set the fetch mode as array
$result = DB::select('select * from users');
Zum Beispiel können Sie jetzt auf diese Weise ein Ergebnis erzielen.
$first_email = $result[0]['email'];
Jetzt können Sie in den Standard-Abrufmodus wechseln.
DB::setFetchMode(PDO::FETCH_CLASS);
Der einfachste Weg ist die Verwendung der Laravel-Funktion für die Array-Funktion:
public function toArray()
{
return array_map(function ($value) {
return $value instanceof Arrayable ? $value->toArray() : $value;
}, $this->items);
}
sie können es versuchen
DB::table('commune')->where('Commune','<>', 'ND')->orderBy('Commune')->get()->pluck('Commune');
Eine knifflige und einfache Möglichkeit:
//Got array in stdClass converting to JSON
$temp1= json_encode($result);
//JSON to Array
$temp2= json_decode($temp1,1);
Vielleicht hilft es dir