2016-06-24 7 views
0

みましょう、私は以下のようなクエリを持っていると言う:Laravelの雄弁で以前のクエリ条件を使用してさらにクエリする方法はありますか?

$firstQueryResult = ItemModel::where('type', 'myType'); 
$firstQueryResult = $firstQueryResult->where('size', '>', '10'); 
$firstQueryResult = $firstQueryResult->where('price', '>', '10'); 
//many other condition..... 
$firstQueryResult = $firstQueryResult->paginate(10); 

は今、私は基本的に一つの条件を除いて、第1のクエリと同じである非常に類似したクエリを、持っているので、私はこのような何かをしようとした。

$firstQueryResult = ItemModel::where('type', 'myType'); 
$firstQueryResult = $firstQueryResult->where('size', '>', '10'); 
$firstQueryResult = $firstQueryResult->where('price', '>', '10'); 
//many other condition..... 
$secondQueryResult = $firstQueryResult->where('special', 'true')->count(); 
$firstQueryResult = $firstQueryResult->paginate(10); 

2番目のクエリが機能する間、最初のクエリは2番目のクエリの余分な条件も取得します。後の開発でもこれらの2つのクエリは非常によく似ているので、将来的にはより良い管理のために、最初のクエリのコピーと貼り付けはしたくありません。最初のクエリで混乱することなく、最初のクエリで設定された条件を再利用する方法はありますか?

P.S.私は、あなたがこのように一緒にクエリを接着し、クエリの一部を再利用することができますlaravel 4.2

答えて

0

を@ herrjeh42の答えのほかに:ここで説明したように

public function getItem() { 
    $query = ItemModel::where('type', 'myType'); 
    $query = $this->queryPriceSize($query); 
    //... paginate... 
} 

protected function queryPriceSize($query) { 
    $query->where('size', '>', '10'); 
    $query->where('price', '>', '10'); 
    return $query; 
} 

別のオプションは、クエリのスコープです、私はクローンを使用しても問題を防ぐことができることを発見した。

$firstQueryResult = ItemModel::where('type', 'myType'); 
$firstQueryResult = $firstQueryResult->where('size', '>', '10'); 
$firstQueryResult = $firstQueryResult->where('price', '>', '10'); 
//many other condition..... 
$secondQueryResult = clone $firstQueryResult; 
$secondQueryResult = $secondQueryResult->where('special', 'true')->count(); 
$firstQueryResult = $firstQueryResult->paginate(10); 
:上記の例を使用

関連する問題