2014-12-05 90 views
1

我想爲雄辯做一個別名。使連接的雄辯別名('東西')

我希望能夠運行User::draft->all();,這應該與User::connection('draft')->all();相同。

有誰知道我該怎麼做?

我曾嘗試以下:

class CustomBuilder extends \Illuminate\Database\Query\Builder 
{ 
    public function draft() 
    { 
     $this->setConnection('draft'); 
     return $this; 
    } 
} 

class MyModel extends \Illuminate\Database\Eloquent\Model 
{ 
    protected function newBaseQueryBuilder() 
    { 
     $conn = $this->getConnection(); 
     $grammar = $conn->getQueryGrammar(); 
     return new CustomBuilder($conn, $grammar, $conn->getPostProcessor()); 
    } 
} 

但問題是,我得到以下錯誤:Call to undefined method CustomBuilder::setConnection()

不知道如何解決這個問題?

+1

'\ Illuminate \ Database \ Query \ Builder'沒有'setConnection'方法 – 2014-12-05 14:56:32

+0

謝謝@ matt-burrow,我明白了。但我需要的是改變連接的另一種方式。 – 2014-12-05 14:59:37

回答

1

我不知道你爲什麼要這樣做,我個人會這樣做;

User::on('draft')->all(); 

因爲這解釋了代碼中的代碼。以下並不無需探索你的代碼。

但是,如果你想要你可以嘗試添加這種方法到你的模型;

public static function draft(){ 
    $instance = new static; 
    $instance->setConnection('draft'); 
    return $instance->newQuery(); 
} 

那麼你可以做User::draft()->all()

就我個人而言,我會使用on方法,但第二個方法尚未經過測試。

編輯︰看setConnection後不是一個靜態方法。所以on方法是要走的路。

+0

謝謝@ Matt-Burrow。 – 2014-12-08 14:00:48