2017-05-02 11 views
0

我正在寻找一种方法来创建类似于Eloquent作用域的自定义数据库查询方法。如何在Laravel 4.2中创建自定义数据库查询生成器方法

例如

class User extends Eloquent 
{ 
    public function getActiveUsers() 
    { 
     //... 
     //... 
     $data = DB::table('myTable') 
      ->where('active', 1) 
      ->myFun($var1, $var2) //<-- custom method 
      ->limit(10)->get(); 
     dd($data); 
    } 
} 

而在myFun()我会有这样的

public function myFun() 
{ 
    if(condition 1) 
    { 
     $query->where('col', 12) 
    } 
    if(condition 2) 
    { 
     $query->where($va2, 'test') 
    } 
} 

最后这个where子句将被添加到主查询的一些事情。

我发现this solution,但它是用于Laravel 5.我正在寻找Laravel 4.2。

请注意:应用程序处于生产阶段,所以我不能使用Eloquent范围,所以我期望创建一些类似的东西。

+0

我认为你可以使用'DB ::听(函数($ SQL){})'那里,你可以在一行中得到的查询实例。 –

回答

-1

按您的要求按照以下概念:

class User extends Eloquent 
{ 
    public $query = null; 
    public function getActiveUsers() 
    { 
     //... 
     //... 
     $this->query = DB::table('myTable'); 
     $this->myFun($var1, $var2) //<-- custom method 
     $data = $this->query->limit(10)->get(); 
     dd($data); 
    } 

    public function myFun() 
    { 
     if(condition 1) 
     { 
      $this->query->where('col', 12); 
     } 
     if(condition 2) 
     { 
      $this->query->where($va2, 'test'); 
     } 

     $this->query->where('active', 1); 
    } 
} 
+0

是的,我知道这种方式,但我在寻找与范围完全相似的东西。即我会写'DB :: table('myTable') - > myFun($ var1,$ var2);'** NOT **'DB :: table('myTable'); $ this-> myFun($ var1,$ var2);'简而言之就像雄辩范围一样。我不知道这是否可能。 –

相关问题