Эли4ка
13.02.2019 - 14:12
Здравствуйте, форумчане. Вопросец ;)
Нужно добавить в БД информацию.
Следующие поля: имя(name),размер(size),теги(tags). Размер и имя значение не массивное и можно сделать так:
class Photo extends AR {
public $name;
public $size;
...
}
То теги это массив тегов(чаще всего) и лежат они в другой таблице. Тогда сам вопрос:как реализовать добавление информации о фотографии с использованием Active Record в данной ситуации?Или это невозможно?
P.S. Информацию гуглила старательно, похожего найти не получилось. :(
P.S.S. Кроме фотографий такую же ситуацию можно смоделировать у человека и его родственников, информации о себе у человека на сайте( например несколько моделей телефонов у него ). Так что думаю задача востребована и довольно часто встречающаяся.
VeRTak
13.02.2019 - 16:13
Эли4ка
Отношения
Один к одному
Один ко многим
Многие ко многим
И.т.д
Эли4ка
13.02.2019 - 16:23
Цитата (VeRTak @ 13.02.2019 - 15:13) |
Отношения
Один к одному Один ко многим Многие ко многим И.т.д |
Я про это знаю. Не могу понять как реализовать один ко многим с помощью active record
VeRTak
13.02.2019 - 16:31
Эли4ка
Что за фреймворк? обычно там методы hasOne, belongsTo и так далее, или я опять что-то не правильно понял из вопроса?
Эли4ка
13.02.2019 - 17:06
Цитата (VeRTak @ 13.02.2019 - 15:31) |
или я опять что-то не правильно понял из вопроса? |
Думаю все же неправильно. Нужно один-многие не выборку делать, а добавлять в БД. То есть добавить в БД 1 фотографии и например 3 тега к ней. Я пытаюсь понять, как это сделать через Active Record.
Велосипед собственного изобретения планируется

ну или на крайний случай Yii,ABC
Michael
14.02.2019 - 10:36
Цитата (Эли4ка @ 13.02.2019 - 15:06) |
То есть добавить в БД 1 фотографии и например 3 тега к ней. Я пытаюсь понять, как это сделать через Active Record. |
Самый простой способ, которым обычно идут в yii:
- добавляешь в эту AR модель поле, в котором через запятую будешь указывать теги
Это поле нужно для формы редактирования
- в модели для сценариев Создание/Редактирование в afterSave уже настраиваешь нужное состояние БД, для не новых записей у тебя всегда есть список старых тэгов(в виде связей) и новое то что надо,
вот по ним бегаешь, не актуальное удаляешь, для новых тегов и связей свои AR модели создаешь и сохраняешь.
_____________
There never was a struggle in the soul of a good man that was not hard
Эли4ка
14.02.2019 - 11:19
Цитата (Michael @ 14.02.2019 - 09:36) |
- добавляешь в эту AR модель поле, в котором через запятую будешь указывать теги |
примерно так?
public $tags =[];
Цитата (Michael @ 14.02.2019 - 09:36) |
- в модели для сценариев Создание/Редактирование в afterSave уже настраиваешь нужное состояние БД, для не новых записей у тебя всегда есть список старых тэгов(в виде связей) и новое то что надо, вот по ним бегаешь, не актуальное удаляешь, для новых тегов и связей свои AR модели создаешь и сохраняешь. |
То есть использовать цикл, верно я поняла?
Michael
14.02.2019 - 11:45
Ну если через запятую указывать, то $tags = '' , т.к. строкой передаваться будет.
А так зависит конечно от удобства, может ты захочешь выбор давать чтобы галками выбирали существующие теги, тогда можно и под массив сообразить.
А там да, цикл.
_____________
There never was a struggle in the soul of a good man that was not hard
Эли4ка
14.02.2019 - 14:14
Значит я мыслила в нужную сторону.
Получается, если я хочу не строкой, а массивом, то мне нужно еще и для тегов свой AR объект делать и его в цикле вызывать?
Michael
14.02.2019 - 15:53
Для каждой таблицы в БД по AR классу. Это то что AR и есть, один AR объект - это строка какой то таблицы.
Есть БД
post
id content
tag
id name
post_tag
id post_id tag_id
Вот соответственно три AR класса.
_____________
There never was a struggle in the soul of a good man that was not hard
Цитата (Эли4ка @ 13.02.2019 - 12:23) |
Не могу понять как реализовать один ко многим с помощью active record |
А почему один ко многим? Если это теги, можно с большой уверенностью предположить, что возможна и обратная связь. А это значит многие-ко-многим тут нужно наверно.
Цитата (Michael @ 14.02.2019 - 11:53) |
Вот соответственно три AR класса. |
Если делать м-к-м, то два получится, так как таблица связей будет без первичных ключей, соответственно не может быть AR.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Эли4ка
14.02.2019 - 16:26
Цитата (twin @ 14.02.2019 - 15:07) |
А почему один ко многим? Если это теги, можно с большой уверенностью предположить, что возможна и обратная связь. А это значит многие-ко-многим тут нужно наверно. |
Согласна. Этот момент я упустила.
В итоге для добавления имени и размера фотографии нужна одна операция в БД. Для тегов-2*N,где N число тегов.
Тут нужно понимать, что фреймворк не должен накладывать ограничений. Не вписывается задача в концепцию AR, значит не нужно сильно в неё упираться. К тому же любой фреймворк, который проповедует актив рекорд, об этом знает и дает возможность обойти эту сложность.
Внутри любого класса AR можно использовать возможности конструктора запросов к примеру, хотя это не вписывается в концепцию. А вообще нужно посмотреть в сторону метода link(), если юзаешь Yii2
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Эли4ка
14.02.2019 - 17:17
Цитата (twin @ 14.02.2019 - 15:53) |
А вообще нужно посмотреть в сторону метода link(), если юзаешь Yii2 |
Yii2 это на крайний случай.
Цитата (twin @ 14.02.2019 - 15:53) |
Не вписывается задача в концепцию AR, значит не нужно сильно в неё упираться. К тому же любой фреймворк, который проповедует актив рекорд, об этом знает и дает возможность обойти эту сложность. |
Не совсем поняла этот момент. То есть задача добавление(не выборка) в БД многие-ко-многим не очень удобна для AR, верно?
Цитата (Эли4ка @ 14.02.2019 - 13:17) |
БД многие-ко-многим не очень удобна для AR, верно? |
Ну удобство - дело субъективное. Апологеты говорят что очень удобно, тут тебе самой выбирать. Я про то, что это уже не совсем актив рекорд получится. И если ты его пытаешься сюда присуропить, должна это понимать.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.