2016-08-29 14 views
0

whereRawステートメントで列sent_storenameを作成しようとしています。しかし、値を連結しようとすると、クエリは機能しません。私はそれを動作させる列を修正します。これどうやってするの?Laravel5 whereRawが列名をパラメータ化しようとしていません

$query = $this->model->getQuery()->where('products.environment_hash', $hash)->whereRaw('products.deleted_at is null'); 
$query->select('sku_config','name', 'stock_quantity', 'color', 'size', 'special_price', DB::raw('(special_price/default_price-1)*100 as profit_mark')); 
$query->leftJoin('ads', 'ads.product_id', '=', 'products.id'); 
$query->whereRaw("products.sent_? = 0", array('storename')); 
+0

$ query-> whereRaw(str_replace( '?'、 'storename'、 'products.sent_?')。 "= 0"); –

+2

私はあなたがこれを行う必要がある理由を考えることができません、根本的な問題があり、あなたが回避策としてこれを思いついた場合、おそらく私たちはあなたが実際の問題を手助けすることができますです。 – user3158900

+0

@ user3158900複数のstore_names(例:a、b、c、d)があります。それぞれには、(sent_a、sent_b、sent_cなど)というフィールドがあります。変数を使って列名を作成したいだけです。 –

答えて

0

ここで?を使用すると何が起こっているのか誤解していると思います。これは単純な連結ではなく、パラメータバインディングです。 http://php.net/manual/en/pdostatement.bindparam.phpを参照してください。

ただし、連結(.)でも有効です。

$query->where("products.sent_".$storeName.", 0); 

しかし、これは、このようなやり方で新しいストアが追加されるたびにテーブルを変更する必要があるため、良いデザインのようではありません。

あまりにも遅くなければ、私はこのアプローチを再考するだろう。おそらくstoresという新しいテーブルをそれぞれ独自のidに作成することができます。次に、product_id,store_id、およびsent列を含むピボットテーブルを作成します。それでは、belongsToManyの関係を利用することができます。

関連する問題