为连接(“某物”)制作雄辩的别名


Make Eloquent Alias for connection('something')

我想为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 方法是要走的路。