2016-12-19 5 views
4

Ich habe es mit wirklich altem Code zu tun, den ich versuche, auf Laravel zu laufen. Die Datenbank ist kompliziert und voller unnötig langer gespeicherter Prozeduren, deren Budget ich nicht umschreiben kann.Laravel und Ergebnisse von gespeicherten MySQL-Prozeduren

Zum größten Teil sind diese gut funktionieren, wie ich singuläre Ergebnisse wie $ myID = $ result zugreifen kann [0] -> id

Ich hoffe, das ist etwas mehr als eine Lücke in meinem PHP ist Wissen ...

$result = DB::select(DB::raw("Call MyOldStoredProcedure()")); 
print_r($result); 

Das gibt mir:

Array ([0] => stdClass Object ([MIN(user_responses.sectionid)] => 2)) 

Was ich wenig überraschend nicht als

zugreifen können
$number = $result[0]["MIN(user_responses.sectionid)"]; //or... 
$number = $result[0]->... 

Was kann ich tun, um dieses einzigartige Ergebnis von diesem seltsamen assoziativen Array/Objekt abzurufen? Ich gebe gerade auf und analysiere die Array-Kette, aber ich weiß, dass es einen besseren Weg gibt.

Antwort

1

Die einfachste Option ist geschweiften Klammern zu verwenden, um die Sonderzeichen in der Lage sein zu zitieren: ist eine Variable auf den Namen der Eigenschaft zu setzen

$number = $result[0]->{'MIN(user_responses.sectionid)'}; 

Eine weitere Option, und dann die Eigenschaft zugreifen verwenden die Variable:

$property = 'MIN(user_responses.sectionid)'; 
$number = $result[0]->$property; 

Zusätzlich können Sie auch das Objekt in ein Array, konvertieren und die Eigenschaft zugreifen, wie Sie ursprünglich versucht.

$array = (array)$result[0]; 
$number = $array['MIN(user_responses.sectionid)']; 

// or, if you're on PHP 7+ 
$number = ((array)$result[0])['MIN(user_responses.sectionid)']; 
+1

Es genagelt. Wusste nicht, dass geschweifte Klammern beim Zugriff auf ein Objekt eine Sache waren. Zeit, einige Dokumente erneut zu lesen! Vielen Dank. – QNeville

Verwandte Themen