Первое - настраивается по дням недели и времени - например, пн/ср/пт;
Второе (уроки) - добавляются в зависимости от приобретения абонемента - Допутим, пользователь купил 7 уроков - эти уроки надо добавить в бд и указать даты в зависимости от его расписаний (первый пункт).
Помогите нарисовать картину в голове, как это реализовать?
Если урок может относится к нескольким расписаниям, а к расписанию может относится несколько уроков, то тут связь многие-ко-многим. Оформляете промежуточную (в ларе это pivot-таблица) таблицу "Уроки пользователя по расписанию" - внешний ключ для урока пользователя и внешний ключ для расписания. В ларе же в обеих ваших сущностях устанавливаете связь с помощью belongsToMany().
Alixx, вопрос заключается в том, что каким образом добавить уроки в базу данных разбив их по дням, указанным в таблице расписания пользователя?
Например:
Расписание: пн/ср/пт
Уроки: пользователь купил 10 уроков сегодня - в таблицу уроков надо добавить 10 записей и указать start_at по очередно зависимо от его расписания)
- первый урок в пн, второй урок в ср, третий в пн, четвертый в пн и тд.)
Так как определенный урок может потребовать редактирования, например, пользователь захотел перенести один урок на другой день, мы просто берем и один урок меняем start_at на другой, основное расписание не трогаем. Поэтому было решено добавить каждый купленный урок в таблицу по отдельности, так же в дальнейшем они будут выводиться как "история уроков"
FANTASANTA, Что у вас в расписании? Просто дни недели, т.е. всего 7 записей?
И судя по вашему описанию, получается сущности неправильно названы. Расписание - оно всегда состоит из уроков и дня недели, а урок состоит из ПРЕДМЕТА и времени. Т.е. то, что вы называете уроками - это предметы, а не уроки.
FANTASANTA, Предметы:
id предмета и прочие атрибуты Предметы, купленные пользователем: (та самая pivot таблица, belongsToMany)
id пользователя, id урока Расписание:
id расписания, id пользователя, день недели, дата и прочее, что нужно
-- Если один предмет может относиться к нескольким расписаниям у пользователя, то Уроки:
id расписания, id предмета, время урока
-- Если один предмет может относиться только к одному расписанию, то Предметы, купленные пользователем:
id пользователя, id урока, id расписания, к которому предмет и будет относиться
Тут уже уроки не нужны.
Как вы могли заметить, в таблице lessons три записи, которые имеют разные даты, исходя из users_timetable.
Дело в том, что на платформе много разных предметов, о которых вы говорите, и пользователь имеет возможность приобрести уроки по этим предметам (в моем примере это course_id - English).
Сложность для меня заключается в том, что когда пользователь покупает уроки по определенному предмету, то в таблицу lessons надо добавить то кол-во уроков, которые он приобрел, и в столбце start_at указать даты предстоящих уроков.
UPD: сложность именно в start_at - я не знаю как указать предстоящие даты, исходя из расписании в users_timetable
Но сейчас еще один вопрос возник, вероятно я неправильную логику построил для данной задачи.
Когда сам пользователь захочет сменить основное расписание в users_timetable, потом придется менять start_at в lessons - а там могут быть много позиций по одному пользователю..
Как сделать даже в голову не приходит, не могли бы вы подсказать, если разобрались в моей задаче?)
FANTASANTA, я выше вам описала схему, на неё можете ориентироваться, поиграться.
Я бы переделала users_timetable: users_timetable:
id, course_id, день недели, время
С lessons 2 варианта:
1. lessons:
id, id_users_timetable, определённая дата
2. Избавляемся от lessons. В users_timetable добавляем поле - lessons - массив с определёнными датами.
В варианте 1 вам всё равно нужно менять несколько записей при изменении расписания в users_timetable, но вам будет проще вытаскивать только нужные даты, с помощью id_users_timetable.
В варианте 2 меняете одну запись в users_timetable.