it-swarm.com.de

Laravel 5.1 DB: toArray auswählen ()

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...

)

12

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);
22
Jose Mujica

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

12

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 Sammlung Eloquent 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();
9
Alexey Mezenin

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?

1
Tobias Sette

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.

1

Versuche dies

$result = DB::select($sql);
$arr = [];
foreach($result as $row)
{
    $arr[] = (array) $row;
}
1
huuuk

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);
0
Parvez Rahaman

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);
}
0
Mohsen

sie können es versuchen 

DB::table('commune')->where('Commune','<>', 'ND')->orderBy('Commune')->get()->pluck('Commune');
0
Mourad MAMASSI

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

0
Vish