5

Laravel PHPフレームワークでは、次のようにwhere句内で条件を使用できます(Fluent)。

...
->where(function($query) use ($var) {
    if(isset($var)) {
        $query->where('something', '=', $var);
    }
})
->...

したがって、$ var変数がない場合、where句はクエリに追加されません。

同じことをしたいのですが、join句を使用します。たとえば、$ varが設定されている場合にのみ別のテーブルと結合しますが、これが機能しない場合、クエリは折りたたまれます。

...
->join('tableB', function($query) use ($var) {
    if(isset($var)) {
        $query->on('tableA.id', '=', 'tableB.id'); 
    }
})
->...

なにか提案を?

4

1 に答える 1

9

1つのキャストですべてのメソッドをチェーンする必要はありません。例えば:

// Instantiates a Query object.
$query = Db::table('posts')->where('published', '=', '1');

// Adds conditional join and where
if (Input::has('category')) {
    $query->join('categories', 'categories.id', '=', 'post.category_id')
        ->where('categories.permalink', '=', Input::get('category'));
}

// Adds another clause
$query->order_by('created_at');

// Fecthes results
$results = $query->get()
于 2013-03-21T16:04:19.243 に答える