为模型动态设置数据库连接?

时间:2014-04-26 19:08:35

标签: laravel laravel-4

我正在创建一个多租户应用程序,并为每个用户和他/她的子用户分配一个数据库。
我首先获取该用户的数据库名称/密码/用户名,然后我需要将其作为所有数据库操作的默认值。

如何在Laravel 4中实现这一目标?

1 个答案:

答案 0 :(得分:3)

您可以使用连接方法:

User::connection('master')->where('name', $name)->get();

您也可以使用存储库模式来帮助您:

 class PostRepository {

    private $connection = 'default-connection';

    public function setConnetion($connection)
    {
        $this->connection = $connection;
    }

    public function all()
    {
        return Post::on($this->connection)->all();
    }

    public function query()
    {
        return Post::on($this->connection);
    }

}

它会让你:

$post = new PostRepository;

$post->setConnection('new-connection');

return $post->query()->where('name', $name)->get();

return $post->all();

你也可以创建一个BaseModel并在其中进行:

class BaseModel extends Eloquent {

    private $connection = 'default-connection';

    public function __construct()
    {
        if (Auth::check())
        {
            $this->setConnection(Auth::user()->database_connection);
        }
    }

}

class Post extends BaseModel {

}