2013-12-05 2 views
1

Я работаю над приложением laravel 4, в котором я хочу, чтобы пользователь регистрировался для приложения, и когда они регистрируются, приложение должно разрешить новую пустую базу данных зарегистрированному пользователю, я использую mysql для внутреннего интерфейса, я знаю, следующий код, чтобы установить соединение с базой данныхСоздание базы данных на лету

Config::set('database.connections', ConnectionArray); 

и установить его по умолчанию

Config::set('database.default', ConnectionKey); 

для подключения другой базы данных вручную я могу использовать этот способ

'mysql' => array(
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'database' => 'database', 
    'username' => 'root', 
    'password' => '123456', 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
), 
'mysql_tenant1' => array(
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'database' => 'tenant1', 
    'username' => 'root', 
    'password' => '123456', 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
), 

Но я хочу, приложение должно создать базу данных динамически ...

+0

Это не очень хорошая идея иметь разные базы данных для разных пользователей, каков сценарий? –

+0

На самом деле я работаю над SaaS-приложением, поэтому каждый пользователь будет иметь одну базу данных, и все данные базы данных будут храниться в основной базе данных ... поэтому, когда пользователь зарегистрируется в приложении, приложение должно выделить новую пустую базу данных на зарегистрированный пользователь ... здесь мне нужно работать с доменом и поддоменом все ... но проблема в том, чтобы создать новую базу данных ... – Rajat

+1

Я понимаю, что вы строите SaaS, но ... Изображение вам нужно изменить таблицу по какой-то причине, через полгода после запуска службы, имея 1000 пользователей. Да, вам нужно изменить 1000 баз данных, а не один. Просто придерживайтесь отношений и одной базы данных. – Andreyco

ответ

3

Создание самой базы данных будет относительно простым. Сложность заключается в том, чтобы каким-то образом связать эти базы данных с пользователями, а затем потянуть эти имена баз данных и использовать их в соединениях. Это должно помочь:

С точки зрения общей стратегии, рассмотреть вопрос о создании нового хранилища с несколькими функциями:

  1. RegisterUser() - Это регистрирует пользователя с именем пользователя/пароль.
  2. CreateDatabase($name , $user_id) - Это должно создать вашу базу данных и сохранить ее имя в таблице, а затем присвоить ее идентификатору пользователя, созданному в регистре пользователя.

Вы можете запустить необработанные запросы SQL в Laravel с DB::statement() (т.е. - `` DB :: заявление («создать базу данных» $ имя).. ', Так что придерживайтесь, что в функции CreateDatabase Я испытал это на местном уровне и он работает просто отлично

ПРИМЕЧАНИЕ.. вы хотите, чтобы сделать некоторые проверки, чтобы убедиться, что база данных не существует, или ваш пользователь будет (очевидно) получаю сообщение об ошибке

Затем может вытащить имя базы данных из таблицы по идентификатору пользователя и создать с ним соединения, как описано ниже. SO!

Laravel 4: Multiple Tenant Application, each tenant it's own database and one global database

Одна вещь - когда вы вносите изменения в структуру базы данных, вам придется обновлять каждую базу данных по отдельности. Обратите внимание, что Artisan позволяет это с опцией --database="database_name".

+0

Другой вопрос - есть ли у вас рассмотрели вашу стратегию резервного копирования и миграции сервера? Среди пунктов продажи SaaS заключается в том, что информация всегда доступна. Это означает, что если ваш сервер (сервер A) не работает, вам понадобится другой сервер (сервер B). А затем C, D, E и т. Д. Модель с несколькими базами данных может затруднить выполнение этой стратегии, если вы намерены иметь тысячи и тысячи пользователей. –

+1

Это очень помогло мне. Спасибо за предложение James Binford – Rajat

+0

Рад помочь! Удачи. –

0

Просто user_id поле в любой таблице (DB от того, что я думаю, что вы описываете) вы хотите, и использовать отношения, чтобы заставить его работать, целая куча полей в одной таблице (или более одной таблицы) может быть более эффективной, чем то, что вы думаете.

+0

Я понимаю вашу концепцию, но это приложение SaaS, поэтому я не хочу создавать его только в одной базе данных. Поэтому я хочу знать, есть ли какой-либо метод, с помощью которого приложение может создать новую базу данных на лету. – Rajat

Смежные вопросы