2016-07-23 6 views
1

Ich habe meine Daten aus Laravel Datenbank-Abfragebefehl:Fehler „Kann nicht Objekt des Typs stdClass als Array verwenden“ beim Zugriff auf eine deutlich vorhandenen, Integer-Typ Daten aus Laravel Datenbank Abfrageergebnis

$group = DB::table('groups')->where("id", $group_id)->first(); 

Wenn ich var mein Dump Daten, die ich erhalten:

object(stdClass)#200 (7) { 
    ["id"]=> 
    int(1) 
    ["levels_id"]=> 
    int(1) 
    ["title"]=> 
    string(8) "Novice 1" 
    ["description"]=> 
    string(11) "Lorem Ipsum" 
    ["max_question_display"]=> 
    int(5) 
    ["created_at"]=> 
    NULL 
    ["updated_at"]=> 
    NULL 
} 

ich die max_question_display zugreifen möchten. Aber wenn ich das tue:

var_dump($group["max_question_display"]); 

PHP gibt Fehler Cannot use object of type stdClass as array.

Wenn ich tun:

var_dump($group->max_question_display); 

ich:

int(5) 

Aber ich will nicht das int. Ich möchte nur die 5. In ganzzahliger Form.

Wenn ich foreach Schleife die $group:

foreach ($group as $t) { 
    echo "<pre>"; 
    var_dump($t); 
    echo "</pre>"; 
} 

ich jedes der Daten als einzelne Daten, die jede Schleife erhalten.

int(1) 
int(1) 
string(8) "Novice 1" 
string(11) "Lorem Ipsum" 
int(5) 
NULL 
NULL 

Dies ist offensichtlich auch nicht die Art, wie das Ergebnis abgerufen, dass ich suche.

Ich habe auch versucht, das erste Element des Arrays zu bekommen, denke, dass dies ein Array mit 1 Element sein könnte, aber das auch den gleichen Fehler auslösen.

Ich bekomme es, dass die allgemeine Antwort auf dieser Seite über diesen Fehler ist, dass "stdClass ist nicht Array". Ich habe mehrere Fragen mit ähnlichen Titeln durchsucht wie meine, aber nichts Adressobjekt, das von Laravel DB kam. Als ich das Handbuch über Laravel DB gelesen habe, wurde mir versichert, dass ich auf die zurückgegebenen Daten wie ein einfaches Wörterbuch/hashmap zugreifen kann.

EDIT: Entschuldigung, ich verstehe meine sehr, sehr Anfänger Fehler. Keine Notwendigkeit, dies zu beantworten. Vielen Dank.

+0

Mit 'var_dump' erhalten Sie den Typ und den Wert. '$ group-> max_question_display' ist der richtige Weg. Sie können ein Echo machen, wenn Sie an dem Typ nicht interessiert sind. –

+0

@IbrahimLawal Oh verdammt. Ich verstehe meinen Fehler. Das war das Ergebnis von var_dump. Wenn ich direkt auf die Variable zugreife, erhalte ich die ganze Zahl. Es tut uns leid. #facepalm –

+0

froh dass geholfen hat :) –

Antwort

2

Beachten Sie die erste Zeile Ihres ersten Var_dump:

object(stdClass)#200 

Weil Sie mit einem Objekt zu tun hat, greifen Sie auf seine Eigenschaften mit ->. Wenn Sie das tun:

var_dump($group->max_question_display); 

Der Grund, warum Sie (int) in der Ausgabe sehen ist, dass die var_dump Funktion den Wert Typ zeigt, neben dem Wert. Um den Wert zuzugreifen, gehen Sie

$group->max_question_display; 

Wenn Sie es auf dem Bildschirm, ohne die Art sehen wollen, verwenden Sie Echo

echo $group->max_question_display; // 5 
+0

Ja, sobald ich diese Frage gepostet habe, klingelt es sofort in meinem Gehirn. Was für ein Idiot, das ich falsch verstanden habe. Vielen Dank. Ich werde diese Antwort akzeptieren, sobald ich dazu in der Lage bin. –

+0

@ChenLiYong, es ist in Ordnung; passiert uns allen. Erinnert mich nur, dass Computer kein Verständnis davon haben, was wir zu tun versuchen. Sie folgen nur Anweisungen. – BeetleJuice

+0

natürlich! Das werde ich immer im Hinterkopf behalten. Vielen Dank! –

1

stdClass ein Objekt ist. Sie können ein Objekt mit Array-Syntax nicht verwenden, um auf seine Eigenschaften zuzugreifen, wenn die Klasse keine Schnittstelle ArrayAccess implementiert.

Wie von @IbrahimLawal angegeben, gibt var_dump sowohl den Typ als auch den Wert aus. Nur $group->max_question_display Echo liefert nur den Wert

echo $group->max_question_display; // 5 

In Zusammenfassung: Sie must Verwendung Pfeil Syntax, wenn sie mit stdClass interagieren.

+1

Ich glaube nicht, dass dein letzter Satz das ist, was du schreiben wolltest. – BeetleJuice

+0

@BeetleJuice Danke, dass du das herausgebracht hast. – Kaspars