[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача на основе Active Record
Страницы: 1, 2
Эли4ка
Здравствуйте, форумчане. Вопросец ;)
Нужно добавить в БД информацию.
Следующие поля: имя(name),размер(size),теги(tags). Размер и имя значение не массивное и можно сделать так:

class Photo extends AR {
public $name;
public $size;
...

}

То теги это массив тегов(чаще всего) и лежат они в другой таблице. Тогда сам вопрос:как реализовать добавление информации о фотографии с использованием Active Record в данной ситуации?Или это невозможно?
P.S. Информацию гуглила старательно, похожего найти не получилось. :(
P.S.S. Кроме фотографий такую же ситуацию можно смоделировать у человека и его родственников, информации о себе у человека на сайте( например несколько моделей телефонов у него ). Так что думаю задача востребована и довольно часто встречающаяся.
VeRTak
Эли4ка

Отношения

Один к одному
Один ко многим
Многие ко многим
И.т.д
Эли4ка
Цитата (VeRTak @ 13.02.2019 - 15:13)
Отношения

Один к одному
Один ко многим
Многие ко многим
И.т.д

Я про это знаю. Не могу понять как реализовать один ко многим с помощью active record
VeRTak
Эли4ка

Что за фреймворк? обычно там методы hasOne, belongsTo и так далее, или я опять что-то не правильно понял из вопроса?
Эли4ка
Цитата (VeRTak @ 13.02.2019 - 15:31)
или я опять что-то не правильно понял из вопроса?

Думаю все же неправильно. Нужно один-многие не выборку делать, а добавлять в БД. То есть добавить в БД 1 фотографии и например 3 тега к ней. Я пытаюсь понять, как это сделать через Active Record.
Цитата
Что за фреймворк?

Велосипед собственного изобретения планируется laugh.gif ну или на крайний случай Yii,ABC rolleyes.gif
Michael
Цитата (Эли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ка
Цитата (Michael @ 14.02.2019 - 09:36)
- добавляешь в эту AR модель поле, в котором через запятую будешь указывать теги

примерно так?
public $tags =[];

Цитата (Michael @ 14.02.2019 - 09:36)
- в модели для сценариев Создание/Редактирование в afterSave уже настраиваешь нужное состояние БД, для не новых записей у тебя всегда есть список старых тэгов(в виде связей) и новое то что надо,
вот по ним бегаешь, не актуальное удаляешь, для новых тегов и связей свои AR модели создаешь и сохраняешь.

То есть использовать цикл, верно я поняла?
Michael
Ну если через запятую указывать, то $tags = '' , т.к. строкой передаваться будет.
А так зависит конечно от удобства, может ты захочешь выбор давать чтобы галками выбирали существующие теги, тогда можно и под массив сообразить.

А там да, цикл.

_____________
There never was a struggle in the soul of a good man that was not hard
Эли4ка
Значит я мыслила в нужную сторону.
Получается, если я хочу не строкой, а массивом, то мне нужно еще и для тегов свой AR объект делать и его в цикле вызывать?
Michael
Для каждой таблицы в БД по 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
twin
Цитата (Эли4ка @ 13.02.2019 - 12:23)
Не могу понять как реализовать один ко многим с помощью active record
А почему один ко многим? Если это теги, можно с большой уверенностью предположить, что возможна и обратная связь. А это значит многие-ко-многим тут нужно наверно.

Цитата (Michael @ 14.02.2019 - 11:53)
Вот соответственно три AR класса.
Если делать м-к-м, то два получится, так как таблица связей будет без первичных ключей, соответственно не может быть AR.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
Цитата (twin @ 14.02.2019 - 15:07)
А почему один ко многим? Если это теги, можно с большой уверенностью предположить, что возможна и обратная связь. А это значит многие-ко-многим тут нужно наверно.

Согласна. Этот момент я упустила.
В итоге для добавления имени и размера фотографии нужна одна операция в БД. Для тегов-2*N,где N число тегов.
twin
Тут нужно понимать, что фреймворк не должен накладывать ограничений. Не вписывается задача в концепцию AR, значит не нужно сильно в неё упираться. К тому же любой фреймворк, который проповедует актив рекорд, об этом знает и дает возможность обойти эту сложность.

Внутри любого класса AR можно использовать возможности конструктора запросов к примеру, хотя это не вписывается в концепцию. А вообще нужно посмотреть в сторону метода link(), если юзаешь Yii2

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Эли4ка
Цитата (twin @ 14.02.2019 - 15:53)
А вообще нужно посмотреть в сторону метода link(), если юзаешь Yii2

Yii2 это на крайний случай.
Цитата (twin @ 14.02.2019 - 15:53)
Не вписывается задача в концепцию AR, значит не нужно сильно в неё упираться. К тому же любой фреймворк, который проповедует актив рекорд, об этом знает и дает возможность обойти эту сложность.

Не совсем поняла этот момент. То есть задача добавление(не выборка) в БД многие-ко-многим не очень удобна для AR, верно?
twin
Цитата (Эли4ка @ 14.02.2019 - 13:17)
БД многие-ко-многим не очень удобна для AR, верно?
Ну удобство - дело субъективное. Апологеты говорят что очень удобно, тут тебе самой выбирать. Я про то, что это уже не совсем актив рекорд получится. И если ты его пытаешься сюда присуропить, должна это понимать.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.