2016-04-28 167 views
1

有没有什么办法可以用Laravel CodeBehind创建新的数据库?我的意思是,我无法使用php artisan或类似的东西。仅仅因为我想为每个注册用户创建一个数据库。之后,我可以使用migration。 我正在使用Laravel 5.2。 感谢您的支持。如何使用Laravel创建新的空数据库模型

+0

好,所以,对于每一个用户,你要为它创建一个数据库? –

+0

是的,我有商店注册用户的一般数据库。但我需要为每个用户提供新的数据库。 –

+0

这种解决方案被称为“多租户”,这里是描述它的一篇文章[多租户数据架构](https://msdn.microsoft.com/en-us/library/aa479086.aspx) – UselesssCat

回答

1

好吧,你可以为每个bd执行一次数据库查询,而不是使用mysql或者你的sgbd数据库创建命令,例如;

DB::getConnection()->statement('CREATE DATABASE :schema', array('schema' => "dasdsdasdsadsadsa")) 

它可能会与你想要的。

+0

是的,它很简单并解决了我的问题。感谢你和每个人回答或评论我的问题。 –

+0

欢迎你。玩的很开心。 –

0

您可以run artisan commands from code

Artisan::call('migrate'); 

运行作曲家命令(你需要它来注册迁移),使用PHP shell_exec

shell_exec('composer dumpauto'); 
+0

我会试试这个,但不是现在。 –

0

可以使用DB门面像这样(提供的SQL用户具有创建数据库权利这样做):

DB::statement('CREATE DATABASE myNewDB'); 

但我促请你重新考虑你的数据结构 - 其为每个用户一个单独的数据库很可能不是正确的解决方案是什么您遇到的任何问题都可能造成更多问题,而不是解决问题。

+0

感谢您的建议,我同意你的观点,这有点复杂。但是我们必须为每个用户创建数据库。其实用户不是用户。用户是一家公司。所以公司有很多数据。我无法将它们保存在一个数据库中。顺便说一下,这是一个问题。我是laravel的新手。我将在哪里运行此代码。它将控制器或模型? –

+0

这由你来决定。一般来说,你不会想把太多的逻辑放入laravel控制器中,因为控制器中的代码不能以一种很好的方式被重用,但是如果这种数据库创建只发生在一个地方,那么你就可以避开它。否则,我会尝试使用面向对象的方法,并将数据库创建作为适当实体模型中的方法,如$ company-> createDatabase() –

0

您可以通过将DBNAME这样

public function index() { 
    $userName = 'bigboytr'; // Your Database name to be created 
    DB::statement("CREATE DATABASE $userName"); 
} 

警告创建从控制器多达数据库:

你并不需要为每个用户创建一个数据库,它将使系统非常复杂。 。恩,如果你有成千上万的用户在某些情况下,则移动用户的信息,以注册用户“一般”的数据库将是非常艰难

建议:

什么,我建议你把它创建为未注册的用户提供新表格,以便您可以将它们移动到注册用户的表格,这将使您的过程变得轻松。

提示:

您可以在一些表进行比对数据库引擎,并选择最适合你的比赛像this

相关问题