2017-08-12 3 views
0

私は、指定された日付にそれらのレコードのベースを取得するだけで何年にもわたるフィルタリングをしようとしています。以下は完全な雄弁なクエリです。年も正しくないレコードを返します

$products = product::whereYear('created_at', '2009') 
      ->where('type_id','!=','') 
      ->orWhereNotNull('type_id') 
      ->with('type','product_warehouses.warehouse') 
      ->get(); 

現在、私は2017年以内のレコードしか持っていませんが、2009年の日付を指定してもまだ私にレコードを与えています。しかし、私がこれを取り出す場合、

->orWhereNotNull('type_id') 

というクエリは、指定された年に私にレコードベースを与えるように動作します。任意のアイデアは、助けてください?

+0

を使用することができます。私はあなたが[この回答](https://stackoverflow.com/questions/16995102/laravel-4-eloquent-where-with-or-and-or)を見てみたいと思います。 –

+0

ええ、それも私の考えです。今すぐ修正 –

答えて

0

修正、私はちょうど今、あなたはOR条件を持っているので、ヒントは `WhereNotNull` **または**であり、代わりに

$products = product::whereYear('created_at', date('Y'))->where(function($query){ 
     $query->where('type_id','!=',''); 
     $query->orWhere('type_id','!=',null); 
    })->with('type','product_warehouses.warehouse')->get(); 

または

->where('type_id','!=','') 
->orWhere('type_id','!=',null) 
関連する問題