2016-12-19 3 views
4

Я имею дело с каким-то действительно старым кодом, который я пытаюсь запустить на Laravel. База данных сложна и заполнена ненужными длительными хранимыми процедурами, в которых у меня нет бюджета для перезаписи.Laravel и результаты хранимых процедур MySQL

По большей части, они работают хорошо, как я могу получить доступ к сингулярным результатам как $ MyId = $ результата [0] -> идентификатор

Я надеюсь, что это нечто большее, чем зазор в моем PHP знание ...

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

Это дает мне:

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

Что я Unsurprisingly не может получить доступ в

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

Что я могу сделать, чтобы получить этот сингулярный результат из этого странного ассоциативного массива/объекта? Я собираюсь отказаться и разобрать массив, но я знаю, что есть лучший способ.

ответ

1

Самый простой вариант заключается в фигурные скобки для того, чтобы быть в состоянии процитировать специальные символы:

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

Другой вариант, чтобы установить переменную с именем свойства, а затем получить доступ к свойству с помощью переменная:

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

Кроме того, вы можете также преобразовать объект в массив, и получить доступ к собственности, как вы изначально пытались.

$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

Прибита гвоздем. Не знал, что фигурные скобки были при доступе к объекту. Время перечитать некоторые документы! Спасибо. – QNeville

Смежные вопросы