2015-07-01 6 views
1

я использую загореться 5.1. * - (на самом деле «laravel/lumen-framework": "5.1.*»)Eloquent модель ToArray() теряет тип для ключей

Моя проблема заключается в том, что у меня есть другое поведение, когда я

var_dump($model->toArray()); 

для двух различных (но с аналогичными php version 5.6.8-1~dotdeb+wheezy.1 vs PHP 5.6.10-1+deb.sury.org~trusty+1) и теми же пакетами поставщиков).

В первой среде, целочисленные атрибуты будут INT:

array:4 [▼ 
    "id" => 1 
    "value" => "email" 
    "standard" => 1 
    "order" => 0 
] 

во втором, его строка:

array:4 [▼ 
    "id" => "1" 
    "value" => "email" 
    "standard" => "1" 
    "order" => "0" 
] 

Любые идеи?

+3

Сначала вы должны проверить, действительно ли тот, кто бросает плохо, фактически вытаскивает данные из базы данных. Это зависит от того, какой драйвер MySQL вы используете. MySQLND делает это правильно, в то время как libmysql извлекает все значения в виде строк, так что, возможно, это так. Поэтому сначала попробуйте сбросить модель на эту вторую среду перед тем, как выполнить кастинг в массив и проверить правильность ее атрибутов. Я бы поспорил, что это не так;) –

+0

В то же время я нахожу решение, о котором вы говорите. Установка, apt-get install php5-mysqlnd решила проблему. Я думаю, что это связано с методом toArray, и они должны поместить mysqlnd как зависимость или, по крайней мере, как предложение. – catalinux

+0

На самом деле это не мешает методу toArray(), как я уже упоминал. Разница исходит от соединителя базы данных, который либо извлекает все данные в виде строки (libmysql), либо значения отливки, например, целые числа (mysqlnd). Таким образом, это исключительно проблема на стороне сервера, которую вы не можете решить, используя компоновщик deps, а также пакет Linux, а не PHP. –

ответ

0

Проблема заключается в том, какой драйвер MySQL вы используете. MySQLND извлекает И отличает значения, в то время как libmysql просто извлекает все значения в виде строк. Это не имеет никакого отношения к самому Laravel, ни с PHP. Это просто проблема с соединителем базы данных, который вы используете для разговора с базой данных. Простой apt-get install php5-mysqlnd должен сделать трюк.

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