Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.02.2020 19:54:55

каждому пользователю своя база данных

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

для выполнения данного задания было решено создавать для каждого пользователя отдельную базу данных и указывать в его профиле данные для подключения.
структура-
main_base - храним всех пользователей
user1_base - данные пользователя user1
...
user478_base - данные пользователя user478

как такое осуществить?
на php я бы это легко сделал получив поля db_user and db_pass из таблицы users в main_base и создав новое соединение
$connect = new PDO("mysql:host=localhost;db_name=$name;charset=utf8", $db_user, $db_pass);
вывел пользователю его информацию.

Не в сети

#2 23.02.2020 11:37:13

Re: каждому пользователю своя база данных

В этом вашем уиндусе(тьфу-тьфу-тьфу, чур меня!) было такое понятие как dll-hell, подробности в вики, но тут будет схожая ситуация.
Как будет осуществляться миграция?
Что с целостностью, когда один пользователь даст ссылку на свою запись другому пользователю?
А если потребуется апдейт на таблицы произвести? Например значение одного  поля заменить на другое?

И главное, совершенно непонятно, зачем это нужно, какая цель преследуется в итоге, из постановки задачи это легко выполняется и в пределах одной бд.

Не в сети

#3 23.02.2020 13:33:05

Re: каждому пользователю своя база данных

над миграцией не думал.
ссылка должна привести пользователя на страницу с его данными.
ну да - придется руками редактировать кучу баз данных
действительно не выход. не могли бы вы подсказать - мне лучше создать 1 базу данных а в ней таблицы типа
users - все данные пользователя (id/login/password/role/и т.д)
user_data - все записи пользователя (id/date/text/и т.д)
а выборку делать по id пользователя?
просто изначально смущало то что если пользователей будет 100000 и у каждого по 100000 записей, то делать выборку будет затратно?

Не в сети

#4 23.02.2020 14:08:09

Re: каждому пользователю своя база данных

Естественно это делается на 1 бд, заводить лишние сущности без нужды - это не тру вэй и способ легко подложить себе мину в случае сопровождения. Обновить даже 1000баз будет то еще удовольствие.

1. User - все данные пользователя: id, login, md5hash, roles,...
2. Record - id, user_id, date, text

Выборку данных можно сделать так

//модель таблицы record
class dbRecord exnends Model
{
  protected $table='record';//имя таблицы

  // граничные условия по пользователю
  public function scopeUser($query, $userId)
  {
    return $query->where('user_id', $userId);
  }
}

//контроллер отображающий записи пользователя
class RecordController extends Controller
{
  public function index()
  {
    $records = dbRecord::user(\Auth::id())->paginate();

    return view('index', ['record' => $records]);
  }
}

Обращение к рекорд контроллеру будет возвращать все записи по юзеру.
Стоит добавть скоуп по времени, дабы пользователь мог выбрать период.

Затратность выборки решается либо добавлением индекса по user_id, либо переездом на нереляционную бд, например mongoDb

Не в сети

#5 23.02.2020 14:43:03

Re: каждому пользователю своя база данных

спасибо за ответ.

Не в сети

Подвал раздела