Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
ORM запрос http://forum.kohanaframework.su/viewtopic.php?f=33&t=554 |
Страница 1 из 1 |
Автор: | rain2 [ 17 янв 2013, 20:11 ] |
Заголовок сообщения: | ORM запрос |
Есть 4 таблицы 1. продукты 2. купленные продукты (содержит id и id продукта) 3. категории 4. продактс_категории (содержит id категории и id продукта) Нужно сделать 3 запроса 1 Это вывести все новые продукты Код:
2. Вывести все продукты которые были куплены 3 Вывести все категории в которых есть продукты которые были куплены Помогите с 2 последними запросами |
Автор: | Zorato [ 18 янв 2013, 14:10 ] |
Заголовок сообщения: | Re: ORM запрос |
2. Код:
sold - ваша 2я таблица, products - 1я. 3. Выполняем 2й запрос. Далее: Код:
Надеюсь угадал с названиями таблиц и колонок, если нет - поправьте. П.С. Пишите, если не получилось - будем додумавыть если что не так. П.П.С. В принципе 3й запро можно делать с 2мя join без использования результатов 2го запроса. Если надо - могу написать |
Автор: | rain2 [ 18 янв 2013, 15:04 ] |
Заголовок сообщения: | Re: ORM запрос |
Первый запрос работает, второй выдает ошибку на array_keys($products),(mysql_data_seek() expects parameter 2 to be long, string given). Что значит Код:
это делается только для того что бы обращаться к нему как к объекту модели? Где эти запросы вставлять, в контроллере или их можно запихнуть в модель? Извините если задаю глупые вопросы. |
Автор: | Zorato [ 18 янв 2013, 19:54 ] |
Заголовок сообщения: | Re: ORM запрос |
rain2 писал(а): Первый запрос работает, второй выдает ошибку на array_keys($products),(mysql_data_seek() expects parameter 2 to be long, string given). Проверьте метод as_array() - после его выполнения в переменной $products должен быть массиив с результатом запроса. rain2 писал(а): Что значит Код:
это делается только для того что бы обращаться к нему как к объекту модели? Да, это значит, что если переменную $categories засунуть в цикл: Код:
rain2 писал(а): Где эти запросы вставлять, в контроллере или их можно запихнуть в модель? Я думаю, лучше в модель: на каждый подобный запрос - 1 метод. Что-то вроде Код:
Можно даже сделать его статическим. Хотя никто не запрещает в контроллер... |
Автор: | rain2 [ 18 янв 2013, 22:04 ] |
Заголовок сообщения: | Re: ORM запрос |
Zorato писал(а): Проверьте метод as_array() - после его выполнения в переменной $products должен быть массиив с результатом запроса. Спасибо , где то была моя ошибка, все работает Код:
Спасибо за помощь, но я хочу понять, собственно, это же не ORM, методами ORM такой запрос реально сделать? И еще вопрос в догонку, у меня есть таблицы в базе Код:
все они между собой связаны. Вопрос заключается в том как это все правильно проектировать, как все правильно спланировать, возможно есть какие то инструменты для этого или программы. Я не программист , это так сказать хобби и некоторые банальные вещи для меня превращаются в пытку. Приведу пример, например у меня есть категории и продукты , их связывает таблица products_categories, например мы удалили продукт , следовательно удаляем из таблицы products_categories связь . Это еще можно держать в голове, но что делать если связь с несколькими таблицами, или вы для этого пользуетесь листом A4. Надеюсь я понятно сформулировал вопрос? |
Автор: | Zorato [ 19 янв 2013, 03:18 ] |
Заголовок сообщения: | Re: ORM запрос |
rain2 писал(а): все они между собой связаны. Вопрос заключается в том как это все правильно проектировать, как все правильно спланировать, возможно есть какие то инструменты для этого или программы. Я не программист , это так сказать хобби и некоторые банальные вещи для меня превращаются в пытку. Приведу пример, например у меня есть категории и продукты , их связывает таблица products_categories, например мы удалили продукт , следовательно удаляем из таблицы products_categories связь . Это еще можно держать в голове, но что делать если связь с несколькими таблицами, или вы для этого пользуетесь листом A4. Надеюсь я понятно сформулировал вопрос? Лично я пользуюсь бесплатной dbForge Studio for MySQL. Удобно редактировать таблицы и данные + есть дизайнер диаграммы - как раз тот пресловутый листик а4. Теперь о связях в таблицах. Все необходимые связи надо организовывать через внешние ключи (foreign keys), т.е. в таблице products_categories колонка product_id должна ссылаться на колонку id из таблицы products. Если внешний ключ выставлен, то: 1) Mysql сам проверяет значения product_id, чтобы вы случайно не вставили несуществующий id. 2) При удалении продукта (записи в таблице products) mysql сам удалит все записи из таблицы product_categories, где product_id равен id удаленного продукта. Для этого при создании ключа надо прописать действия при удалении и обновлении. Подробнее http://denis.in.ua/foreign-keys-in-mysql.htm см. ON UPDATE и ON DELETE. Что касается запоминания самой архитектуры приложения, связей и прочего тут 3 варианта: лист а4, доска с маркерами на стене или схема базы на компе(тот же dbforge легко сделает из бд картинку со схемой - таблицами, связями, колонками). Лично я пользуюсь всеми 3 способами. |
Страница 1 из 1 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |