#4 Практическое задание №4. Создание подкатегории и логическая связь "один ко многим"
Primary tabs
Необходимо реализовать следующее:
- Реализовать сущность "Подкатегория", которая помимо технического id содержит:
- Название подкатегории
- "Ссылку" (внешний ключ = id категории) на таблицу "Категория" -- так как каждая подкатегория должна относится к какой-то категории (таким образом между Категорией и Подкатегорией установится связь "один ко многим").
- Реализовать CRUD операции для сущности "Подкатегория" в админке (аналогично тому, что мы уже делали для пользователей).
- Добавить в сущность "Статья" аналогичную связь с Подкатегорией, чтобы каждая статья относилась не только к Категории, но и к какой-то Подкатегории. (аналогично -- появится связь один-ко-многим, т.к. к одной подкатегории может относится множество статей)
- При выводе статьи в списке статьей или на отдельной страницу (в пользовательском разделе) добавить помимо ссылки на категорию (уже ведёт на список всех статей с этой категорией), ссылку "подкатегрия" (так чтобы она вела на отдельную страницу со всеми статьями этой подкатегории)
То же самое задание с пояснением на видео: https://youtu.be/pTl5yZTCiRI
Совместимость категории и подкатегорий (валидация на бэкэнде)
- Для вывода списка подкатегорий в селектбоксе используйте группировку их по категориям, чтобы пользователю было понятно что к чем относится
- При сохранении статьи напишите проверку (в скрипте, ответственно за обработку формы), что выбранная подкатегория относится к выбранной категории, если этого не так, то переведите пользователя назад на форму редактирования (или создания) с отображением тех же данных, которые пользователь отправил на сохранение ранее, но дополнительно выведете сообщение обо ошибке
"Ошибка: Выбранная категория не соответствует подкатегории!"
.
-
Т.е. теперь код, отвечающий за отображение формы, должно быть способнен отображать ошибки (если их массив не пуст).
Для универсальности лучше использовать именно массив, ведь в теории на бэкэнде в дальнейшем могут быть добавлены новые правили проверки полей.
- Log in to post comments
- 32256 reads
sid
Mon, 02/19/2018 - 16:37
Permalink
Прошу проверить, правильно ли
Прошу проверить, правильно ли я движусь,
пока только сущность подкатегория и (CRUD) над ней вам сюда.
vedro-compota
Tue, 02/20/2018 - 14:50
Permalink
вроде да, продолжайте
вроде да, продолжайте разработку. При копировании не забывайте проверять имена таблиц (SQL код) и имена вообще.
_____________
матфак вгу и остальная классика =)
sid
Tue, 02/20/2018 - 23:40
Permalink
Ошибка при добавление
Ошибка при добавление внешнего ключа
в таблицу articles для связи с таблицей subcategory
Проделанные действия:
Далее устанавливаем внешний ключ
Или так:
Выдает ошибку:
vedro-compota
Wed, 02/21/2018 - 12:54
Permalink
уточните
а что такое:
?
_____________
матфак вгу и остальная классика =)
vedro-compota
Wed, 02/21/2018 - 14:23
Permalink
возможная причина -- подсказка
вы добавляете колонку. а потом уже делаете её внешним ключом -- а нельзя ли это эсделать в одно действие?
Скорее всего тут причина вот в чем:
дело в том, что когда вы обновляете схему таблицы и при этом в ней есть какие данные -- происходит проверка допустимости применения этой новой схемы к уже имеющимся данным.
По сути у вас имеются два противоречения, но первое ваш режим работы СУБД пропускает, а вот второе уже нет, вот они:
-- этот запрос, судя по вашему комментарию проходит без проблем, но он уже не совсем корректен, ведь для имеющихся данных вы не назначили значение по умолчанию, хотя требуете NOT NULL. Но что по факту окажется в этом столбце для уже имеющихся кортежей? (проверьте -- не null ли? если так -- то это значит что режим sql на вашей машине просто пропускает такое несоответствие -- дело в том, что сервер можно запускать в разных режимах. По-умолчанию стоит "средняя" строгость)
Ведь получается, что вы пытаетесь установить связь для столбца, где по-идее (это надо проверить) находится null -- а такого PRIMARY KEY ключа в таблице подкатегорий точно нет.
-- именно этому в ошибке речь идёт не про смену схемы -- а про update строк:
Вариант решения:
_____________
матфак вгу и остальная классика =)
sid
Wed, 02/21/2018 - 22:55
Permalink
Измененный sql запрос на
Измененный sql запрос на добавление внешнего ключа subCategoryId
в таблицу articles для связи с таблицей subcategory:
vedro-compota
Thu, 02/22/2018 - 12:12
Permalink
Замечания
_____________
матфак вгу и остальная классика =)
sid
Thu, 02/22/2018 - 12:35
Permalink
Значение по умолчанию для id
Значение по умолчанию для id таблицы subcategory
vedro-compota
Thu, 02/22/2018 - 12:41
Permalink
да, но но не совсем
да, но в вашем скрипте разворота это должно идти сразу после создания таблицы подкатегории но до модификации таблицы статей.
-- это не верно, у вас должно быть написано что-то типа
ведь вы меняете сайт, и должны показать, скажем, модераторам, что для старых статей необходимо что-то переделать руками в админке. Т.е. это не отладка, а вполне себе реальная "заглушка", для уже созданных без подкатегории старых статей.
_____________
матфак вгу и остальная классика =)
sid
Thu, 02/22/2018 - 12:45
Permalink
Изменено
Изменено
sid
Wed, 02/21/2018 - 13:19
Permalink
scql для создания таблицы
scql для создания таблицы subcategory
vedro-compota
Wed, 02/21/2018 - 13:46
Permalink
не хватает пробелов кое-где
не хватает пробелов кое-где
обновлено: теперь ок. исправили.
_____________
матфак вгу и остальная классика =)
sid
Fri, 02/23/2018 - 00:04
Permalink
Добавлена к статье связь с
Добавлена к статье связь с подкатегорией здесь
JinJim
Fri, 02/23/2018 - 11:12
Permalink
Как то так
https://github.com/kdn2517/my-first-cms-...
Все сделал, все работает.
Заморочился только с проверкой - если подкатегория не соответствует категории, то по идее надо бы вернуть на ту же страницу и с введенными/исправленными уже данными, чтобы заново все не вводить. Я это сделал, только слишком громоздко получилось (проверка - https://github.com/kdn2517/my-first-cms-..., для того, чтобы вывести уже введенные данные https://github.com/kdn2517/my-first-cms-... ).
А так все вроде просто, посмотрите.
Pavel1989
Wed, 08/28/2019 - 17:18
Permalink
Практическое задание №4:
Ссылка на коммит:
Коммит
По аналогии с категориями созданы файлы:
subcategory.php, editSubcategory.php, listSubcategories.php
добавлена таблица subcategories.
dimmkan
Sat, 11/02/2019 - 13:22
Permalink
Практическое задание №4
Ссылка на коммит
Также сделал отбор при выборе категории, чтобы выводились только те подкатегории, которые к ней относятся (не нужно делать дополнительной проверки)
NewDeveloper
Fri, 01/28/2022 - 21:51
Permalink
Практическое задание №4
Изменение 4