Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
начинаю изучать ларавел. стоит задача сделать простой сайт с регистрацией, после которой пользователь будет попадать в личный кабинет. в кабинете он может создавать записи и видеть только свои, а так-же осуществлять поиск и редактирование. (типа онлайн записной книжки - купленные товары, сумма, дата покупки, магазин и т.п). далее на основе этих данных строим графики за мес/год/, считаем суммы и т.д т.п математика
для выполнения данного задания было решено создавать для каждого пользователя отдельную базу данных и указывать в его профиле данные для подключения.
структура-
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);
вывел пользователю его информацию.
Не в сети
В этом вашем уиндусе(тьфу-тьфу-тьфу, чур меня!) было такое понятие как dll-hell, подробности в вики, но тут будет схожая ситуация.
Как будет осуществляться миграция?
Что с целостностью, когда один пользователь даст ссылку на свою запись другому пользователю?
А если потребуется апдейт на таблицы произвести? Например значение одного поля заменить на другое?
И главное, совершенно непонятно, зачем это нужно, какая цель преследуется в итоге, из постановки задачи это легко выполняется и в пределах одной бд.
Не в сети
над миграцией не думал.
ссылка должна привести пользователя на страницу с его данными.
ну да - придется руками редактировать кучу баз данных
действительно не выход. не могли бы вы подсказать - мне лучше создать 1 базу данных а в ней таблицы типа
users - все данные пользователя (id/login/password/role/и т.д)
user_data - все записи пользователя (id/date/text/и т.д)
а выборку делать по id пользователя?
просто изначально смущало то что если пользователей будет 100000 и у каждого по 100000 записей, то делать выборку будет затратно?
Не в сети
Естественно это делается на 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
Не в сети
спасибо за ответ.
Не в сети
Страницы 1