2014-12-04 79 views
2

我试图重写雄辩的查询生成器。重写雄辩的查询生成器

我已经尝试了我MyModel如下:

<?php 

class CustomQueryBuilder extends Illuminate\Database\Query\Builder 
{ 
    public function get($columns = array('*')) 
    { 
     die('get'); 
    } 
} 

use CustomQueryBuilder as Builder; 
class MyModel extends \Illuminate\Database\Eloquent\Model 
{ 
    // the model that needs the custom query builder 
} 

但是当我运行MyModel::get()它仍返回对象,而不是死亡。

任何想法如何使这项工作?

+0

你想实现什么? – 2014-12-04 19:25:27

回答

1

我不确定你想要做什么,但至少需要在模型中实现(并覆盖)Illuminate\Database\Eloquent\Model::newBaseQueryBuilder以使其使用新的Builder类。

/** 
* Get a new query builder instance for the connection. 
* 
* @return \Illuminate\Database\Query\Builder 
*/ 
protected function newBaseQueryBuilder() 
{ 
    $conn = $this->getConnection(); 
    $grammar = $conn->getQueryGrammar(); 
    return new CustomQueryBuilder($conn, $grammar, $conn->getPostProcessor()); 
} 
+0

非常感谢@ jacob-budin – 2014-12-05 07:58:34

0

我想做到这一点的最好办法是:

<?php 

namespace MyNamespace\Models; 
use Illuminate\Database\Eloquent\Builder as BaseBuilder; 
use \Illuminate\Database\Eloquent\Model; 


class Builder extends BaseBuilder 
{ 
    public function like($key, $value){ 
     return $this->orWhere($key, 'like', '%' . $value . '%'); 
    } 
} 


class MyModel extends Model 
{ 

    protected $table = 'mytable'; 

    public function newEloquentBuilder($query) 
    { 
     return new Builder($query); 
    } 
}