我想为Eloquent做一个别名。
我希望可以在应该与User::connection('draft')->all();
相同的User::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()
知道如何解决这个问题吗?
我不知道
你为什么要像我个人那样这样做;
User::on('draft')->all();
因为这解释了代码中的代码。遵循操作不会不了解您的代码。
但是,如果需要,可以尝试将此方法添加到模型中;
public static function draft(){
$instance = new static;
$instance->setConnection('draft');
return $instance->newQuery();
}
所以你可以做User::draft()->all()
.
就个人而言,我会使用 on
方法,但第二种方法尚未经过测试。
编辑:查看后设置连接不是一个静态方法。所以 on 方法是要走的路。