Я использую Laravel Query Builder для запроса базы данных MySQL, но он возвращает целочисленные значения в виде строковых значений.
У меня есть следующий запрос.
$query = DB::table('store_products')->select('products.id', 'products.name', 'products.unit_type', 'products.price', 'products.image_path', 'products.is_popular', 'store_products.price AS store_price') ->join('products', 'products.id', '=', 'store_products.product_id') ->join('product_categories', 'product_categories.product_id', '=', 'store_products.product_id') ->where('store_products.store_id', $store_id) ->where('store_products.product_id', $product_id);
Здесь запрос получает Product, который существует в Store_Products
для данного store_id
.
Проблема в том, что он возвращает id
(который является основным ключом для продукта) как string
когда я использую Query Builder. Похоже, что что-то не так с кастами.
Как я могу решить эту проблему?
Заранее большое спасибо.
Кастинг – это не решение, а обходной путь к проблеме. В вашей реальной проблеме отсутствует плагин mysqlnd
.
Проверьте, установлен ли mysqlnd
так
$ sudo dpkg -l | grep 'mysqlnd'
Если он не установлен, вам необходимо установить его так (при условии, что у вас есть php5)
$ sudo apt-get install php5-mysqlnd
Эти команды предназначены для ubuntu . Если у вас есть что-то еще, просто преобразуйте их в соответствующую ОС.
При select
по select
он заполняет внутреннее свойство $attribute
необработанными данными, возвращаемыми базовым драйвером, поэтому, как правило, драйвер MySQL настроен на возврат всех столбцов в виде строк. Здесь он не присваивает атрибут id целому числу.
Вы должны вручную применить его к целому. вы можете либо использовать (int) $variable
синтаксис, чтобы приводить его в целое число «на лету», где вы получаете доступ к атрибуту модели, или вы можете сделать мутатор по этой причине.
public function getIdAttribute($value) { return (int) $value; }
Или вы можете использовать свой атрибут
protected $casts = [ 'id' => 'integer', ];