Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
ORM один ко многим http://forum.kohanaframework.su/viewtopic.php?f=33&t=659 |
Страница 2 из 4 |
Автор: | WinterSilence [ 11 июн 2013, 17:55 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Цитата: // И вот тут мы в цикле создаем новый пустой объект(единицу покупки) через связь в ORM! почему ты уверен что он у тебя каждый раз новый создается? из зачем его каждый раз создавать когда можно модель просто очистить, это менее ресурсоемкий процесс Код:
Цитата: Я же писал, что все работает, за исключением одного непонятного момента.. так хрен знает чем он вызван, поэтому и нужна полная картина, мы же тут не в угадай мелодию играем.. |
Автор: | WinterSilence [ 12 июн 2013, 00:32 ] |
Заголовок сообщения: | Re: ORM один ко многим |
запилил сегодня основу модуля корзины, кому надо могу сырую версию отдать, а через пару дней залью на гитхаб Код:
|
Автор: | WinterSilence [ 12 июн 2013, 00:33 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Код:
Код:
|
Автор: | WinterSilence [ 12 июн 2013, 00:35 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Код:
Цитата: --
-- Структура таблицы `products` -- CREATE TABLE IF NOT EXISTS `products` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `price` float DEFAULT '0', `gty` int(11) DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; |
Автор: | WinterSilence [ 12 июн 2013, 00:38 ] |
Заголовок сообщения: | Re: ORM один ко многим |
view Main Код:
view Short Код:
|
Автор: | borodatych [ 12 июн 2013, 05:48 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Интересный подход, посмотрим. Касаемо прошлой беседы... Цитата: почему ты уверен что он у тебя каждый раз новый создается? Ну а как еще? Это же ООП. Цитата: из зачем его каждый раз создавать когда можно модель просто очистить, это менее ресурсоемкий процесс Опять не верно, объект можно либо создать через new либо уничтожить через unset. И все другие варианты ведут через эти две основные функции, поправьте если ошибаюсь. Цитата: так хрен знает чем он вызван В принципе $this->pk() и есть родное, просто я ожидал более автоматический способ. |
Автор: | WinterSilence [ 12 июн 2013, 09:14 ] |
Заголовок сообщения: | Re: ORM один ко многим |
ненене, девид блейн, нененене... Если на доступных тебе примерах, то тебя мама отправила ковер выбить, а ты пошел его и на.. сжёг, потом пошел и купил новый. в итоге дома конечно лежит теперь чистый ковер и от мамы ты пилюлей не получишь, но это какой-то трешак.. Цитата: Опять не верно, объект можно либо создать через new либо уничтожить через unset. не верно конечно: $fig = Fig; // при наличии у класса Fig public static function Tebe() $fig = NULL; или $fig = 'Vam';// а так "удаляем" хотя не понимаю почему ты решил, что тебе нужно именно новые объекты создавать всегда, ты же при каждом запросе не создаешь вначале объект через ORM::factory (ну ну я на это надеюсь), тем более мне не понятно как ты не смотрев код понял, что у тебя там постоянно новый объект создается. |
Автор: | borodatych [ 12 июн 2013, 10:16 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Цитата: хотя не понимаю почему ты решил, что тебе нужно именно новые объекты создавать всегда, ты же при каждом запросе не создаешь вначале объект через ORM::factory (ну ну я на это надеюсь), тем более мне не понятно как ты не смотрев код понял, что у тебя там постоянно новый объект создается. Хорошо, может я не понимаю всей глубины происходящего и от этого не так выражаюсь.. Пойдем поэтапно, возможно так мы закончим дисскусию и получим левел ап. Сейчас у меня так: Код:
Все вроде бы логично и все работает. Если я уберу, из-за чего и создалась тема... Код:
то в таблицу orders_items в поле order_id будет пусто, значение не передается. Напомню, связь от orders идет "один ко многим" к orders_items через поле order_id в таблице orders_items Если я сделаю так: Код:
то в таблицу orders_items будет писать только последние данные обработанные циклом. Я просто не вижу другого выхода как поместить обращение к связи в цикле, да и логично вроде как. Теперь про ООП, что происходит при вызове связи? Код:
На сколько могу судить - создается новый пустой объект, разве нет? ..а после сейва уничтожается.. предполагаю.. |
Автор: | AmberLEX [ 12 июн 2013, 11:01 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Думаю для цены нужно использовать не float, а decimal `price` decimal(10,2) NOT NULL DEFAULT '0.00', |
Автор: | WinterSilence [ 12 июн 2013, 11:43 ] |
Заголовок сообщения: | Re: ORM один ко многим |
borodatych> по поводу вынести из цикла я погорячился, очистка данных в принципе равнозначна, но все таки давай прокачаем левел т.к. ты думаешь что при Цитата: $items = $order->items; создается новый объект, а это не так - этим действием ты просто копируешь пустую(т.е. с незаполненными полями данных) модель, которая храниться в этой псевдо переменной, далее ты в эту модель передаешь данные и сохраняешь. Цитата: то в таблицу orders_items будет писать только последние данные обработанные циклом. так происходит потому, что данные из модели после сохранения не удаляются т.е. на самом деле записывается первая запись, потом т.к. ты не скидываешь id в NULL остальные данные записываются в тот же кортеж(строку). тут есть еще один подвох с использованием save, т.к. id не передается, то данные будут всегда только добавляться и никогда не обновляться. AmberLEX> это не рабочий вариант, скорее пример. допилю до рабочей версии и скину на гит для дальнейшего развития. вообще очень странно, что такой маленький набор модулей для коханы, например аналогов этого модуля я не нашел, хотя в том же codeigniter такой класс есть в базовой сборке |
Страница 2 из 4 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |