雄辩的对象 - 方法链

时间:2014-11-18 12:43:15

标签: php laravel eloquent

我有以下Laravel Eloquent代码,其中会有很多方法链接:

$foo = EloquentFoo::orderBy('xyz');

if(true)
{
    $foo->whereHas('eloquentModel',function($q){
        return $q->where('name','=','john');
    });
}

鉴于复杂的条件,我需要在不使用'orderBy'或任何其他静态方法的情况下实例化Eloquent Query Builder。

我尝试使用以下内容,但失败了(不知道为什么):

$foo = new EloquentFoo;

2 个答案:

答案 0 :(得分:2)

// get the query
$fooQuery = EloquentFoo::query();

// chain methods    
if (whatever) $fooQuery->whateverMethod();

// execute
$fooQuery->get();

答案 1 :(得分:0)

一个简单的方法:我将我的主键与不存在的东西(不是OPTIMAL解决方案)进行比较,有兴趣看到其他解决方案,虽然我认为这可能有所帮助:

$foo = EloquentFoo::where('id','!=','0'); // id is the primary key and there is no row with value 0
// so basically above I am searching everything
// Perform Chaining Operation 
if(true)
{
    $foo->whereHas('eloquentModel',function($q){
        return $q->where('name','=','john');
    });
}

注意:您可以根据需要在链中多次使用id,它仍然有效:

EloquentFoo::where('id','!=','0')->where('id','!=','0')->get() 

希望它有所帮助(我知道它根本不是OPTIMAL)。