Как получить результат Laravel Query Builder как целое число

Я использую 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);

Здесь запрос получает продукт, который существует вStore_Products для данногоstore_id.

Проблема в том, что он возвращаетсяid (который является первичным ключом для продукта) какstring когда я использую Query Builder. Похоже, что с кастами что-то не так.

Как я могу решить эту проблему?

Заранее большое спасибо.

 Abraham Vegh08 авг. 2016 г., 18:40

Ответы на вопрос(2)

select это населяет$attribute внутреннее свойство с необработанными данными, возвращаемыми базовым драйвером, поэтому обычно драйвер MySQL настроен на возврат всех столбцов в виде строк. Здесь он не преобразует атрибут id в целое число.

Вы должны вручную привести его к целому числу. Вы можете использовать(int) $variable синтаксис, чтобы привести его к целому числу на лету, где вы получаете доступ к атрибуту модели, или вы можете сделать мутатор по этой причине.

public function getIdAttribute($value)
{
    return (int) $value;
}

Или вы можете разыграть свой атрибут

protected $casts = [
    'id' => 'integer',
];
Решение Вопроса

а решение проблемы. Ваша актуальная проблема отсутствуетmysqlnd плагин.

Проверьте,mysqlnd устанавливается так

$ sudo dpkg -l | grep 'mysqlnd'

Если он не установлен, вам нужно установить его так (если у вас есть php5)

$ sudo apt-get install php5-mysqlnd

Эти команды предназначены дляубунту, Если у вас есть что-то еще, просто конвертируйте их в соответствующую ОС.

 Jessedc08 авг. 2016 г., 05:17
Можете ли вы объяснить, почему, имеяmysqlnd установленный даст целые числа?
 linuxartisan08 авг. 2016 г., 05:22
Это родной интерфейс драйвера. Обратитесь к этому для получения дополнительной информации (stackoverflow.com/questions/38034996/...)

Ваш ответ на вопрос