2016-08-07 5 views
4

Laravelクエリビルダを使用してMySQLデータベースをクエリしていますが、整数値を文字列値として返します。Laravelクエリビルダの結果を整数として取得する方法

次のクエリがあります。ここで

$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_idためStore_Productsに存在されている製品を取得します。

問題は、クエリービルダーを使用すると、id(製品の主キー)がstringと返されることです。キャストに何か問題があるように見えます。

どうすればこの問題を解決できますか?

ありがとうございます。

+0

[find()モデルの可能な重複は、ある環境では文字列としてidを、他の環境ではintとしてIDを与えます](http://stackoverflow.com/questions/38034996/find-on-model-gives-id-as-string -in-one-environment-and-in-other) –

答えて

5

キャストは解決策が、問題の回避策はありません。実際の問題にmysqlndプラグインがありません。これらのコマンドはUbuntuのためのものです

チェックがインストールされていない場合mysqlndがそのように

$ sudo dpkg -l | grep 'mysqlnd' 

と同じようにインストールされているかどうか、あなたはそうのようにそれをインストールする必要があります(あなたはPHP5を持っていると仮定)

$ sudo apt-get install php5-mysqlnd 

。他に何かがある場合は、適切なOSに変換してください。

+0

'mysqlnd'をインストールすると整数を提供する理由を説明できますか? – Jessedc

+1

これはネイティブドライバインターフェイスです。詳細はこちらを参照してください(http://stackoverflow.com/questions/38034996/find-on-model-gives-id-as-string-in-one-environment-and-int-in-other) – linuxartisan

2

selectで取得すると、内部のプロパティーに$attribute内部プロパティーが配置されます。そのため、一般に、すべての列が文字列として返されるように構成されています。ここでは、id属性を整数にキャストしません。

手動で整数にキャストする必要があります。 (int) $variable構文を使用して、モデルの属性にアクセスしている場所でそれを整数にキャストするか、その理由でミューテータを作成することができます。

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

それとも、あなたの属性キャストすることができ

protected $casts = [ 
    'id' => 'integer', 
]; 
関連する問題