2017-02-04 1 views
0

Ich arbeite seit ungefähr zwei Monaten mit Laravel 5 und hatte nie Probleme mit dem Framework. Es war bei weitem einer der einfachsten Frameworks mit denen gearbeitet wurde, aber heute begann etwas wirklich Seltsames. Es ist eine Neuinstallation von Laravel 5.3 und in dieser Installation geben meine Eloquent Models String- und numerische Schlüssel für die gleichen Daten zurück. Beispiel unten:Eloquente Modelle, die numerische und assoziative Schlüssel zurückgeben

Modell:

class MailHeader extends Model 
{ 
    protected $primaryKey = 'character_id'; 
    protected $table = 'mail_header'; 
    protected $fillable = [ 
     'character_id','mail_id','mail_subject','mail_sender','mail_sent_date','mail_labels','mail_recipient','mail_read' 
    ]; 

} 

Aufruf zum Abrufen von Daten:

$mail_headers = MailHeader::get(); 

Ausgang:

[ 
     "character_id" => 95923084 
     0 => 95923084 
     "mail_id" => 363893745 
     1 => 363893745 
     "mail_subject" => "Re: XR fort office rental fee and market service, quick questions" 
     2 => "Re: XR fort office rental fee and market service, quick questions" 
     "mail_sender" => 94165960 
     3 => 94165960 
     "mail_sent_date" => "2017-01-12 18:40:00" 
     4 => "2017-01-12 18:40:00" 
     "mail_labels" => "{}" 
     5 => "{}" 
     "mail_recipient" => "{}" 
     6 => "{}" 
     "mail_read" => 1 
     7 => 1 
     "created_at" => "2017-02-04 07:51:25" 
     8 => "2017-02-04 07:51:25" 
     "updated_at" => "2017-02-04 07:51:25" 
     9 => "2017-02-04 07:51:25" 
     ] 

Ich bin nicht sicher, wie man Wort dies aber jemand mir helfen kann . Ich kann keine Dokumentation darüber finden, was das verursachen könnte.

Ich kann bestätigen, dass der Abrufmodus in Illuminate\Database\Connection.php auf PDO::FETCH_OBJ festgelegt ist.

Antwort

0

Ich habe das Problem gefunden. In config/database.php gibt es einen Abschnitt namens PDO Fetch Style.

In diesem Abschnitt wird der Fetch-Typ deklariert, den das PDO beim Abfragen der Datenbank verwenden soll.

Ich hatte diese Deklaration nicht, also tat es PDO::FETCH_ALL, was dazu führte, dass dieselben Daten zweimal zurückgegeben wurden. Einmal mit einem numerischen Schlüssel und einmal mit einem String Key im Modell.

Nach der Deklaration dieses Abschnitts war die Rückgabe ein reguläres Array. Antwort unten.

/* 
|-------------------------------------------------------------------------- 
| PDO Fetch Style 
|-------------------------------------------------------------------------- 
| 
| By default, database results will be returned as instances of the PHP 
| stdClass object; however, you may desire to retrieve records in an 
| array format for simplicity. Here you can tweak the fetch style. 
| 
*/ 

'fetch' => PDO::FETCH_OBJ, 
Verwandte Themen