Русскоязычный форум, посвященный фреймворку Kohana http://forum.kohanaframework.su/ |
|
ORM один ко многим http://forum.kohanaframework.su/viewtopic.php?f=33&t=659 |
Страница 1 из 4 |
Автор: | borodatych [ 28 май 2013, 19:15 ] |
Заголовок сообщения: | ORM один ко многим |
Доброго времени суток. Сразу к делу... Модели: Код:
Код:
Кусок кода отвечающий за сохранение в БД: Код:
Все записывается, но в таблице orders_items ни как не хочется писаться в order_id нужное число, пишет ноль туда, хоть ты тресни. Гляньте пожалуйста со стороны, чего не так сделал? ..чую дело в контроллере, но не знаю как правильно нужно.. |
Автор: | WinterSilence [ 28 май 2013, 19:38 ] |
Заголовок сообщения: | Re: ORM один ко многим |
borodatych> может ты пытаешься добавить значение которое уже есть или которого нет в таблице связанной ключем? |
Автор: | borodatych [ 29 май 2013, 04:56 ] |
Заголовок сообщения: | Re: ORM один ко многим |
to WinterSilence В том то и дел, что нет, насколько могу судить. В orders_items остались две колонки - это связующая order_id и собственная id. Да и сохраняется все, кроме order_id. Попробовал сменить тип у order_id с int на varchar, вдруг чего все таки пишет. Оказалось тупо NULL. Связь вроде бы есть, суда по тому что происходит запись. |
Автор: | borodatych [ 29 май 2013, 05:16 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Странно конечно. Попробовал, по моему насильно, указать order_id, и заработало: Код:
Если это единственное решение и только так можно добиться ожидаемого, то странно почему Kohana не делает это по умолчанию. |
Автор: | WinterSilence [ 29 май 2013, 13:51 ] |
Заголовок сообщения: | Re: ORM один ко многим |
кстати в Model_Order отсутствует $_table_name и почему $items = $order->items; неходится в цикле? Цитата: Если это единственное решение и только так можно добиться ожидаемого, то странно почему Kohana не делает это по умолчанию. а поле order_id имеет свойство AUTO_INCREMENT? sql дамп таблиц всегда пишите и что именно данный код должен делать кстати советую данные корзины хранить не так, а в singleton объекте или что наверное правильнее в модели(Kohana_Model) и дописать методы для работы с ней - получите универсальную корзину, которую можно вставить и в другой проект. хотя первый вариант более универсальный, второй ближе к идеям фреймворка. |
Автор: | borodatych [ 11 июн 2013, 05:39 ] |
Заголовок сообщения: | Re: ORM один ко многим |
to WinterSilence Извиняюсь, что так тянул, забылось.. но тема была закреплена на панели и ожидала очереди) Цитата: кстати в Model_Order отсутствует $_table_name Тут применяется правило(или как там правильно) Kohana: модель - Order, база -Orders. ..где то было в доках.. Цитата: почему $items = $order->items; неходится в цикле? Тут на самом деле, кому как нравится, тот так и организовывает. Решил так, так как мне больше нравится такая схема. То есть заказ идет один, в него пишем кто, от куда, когда. А в orders_items пишем построчно что было куплено, через связь один ко многим из orders. Цитата: sql дамп таблиц всегда пишите и что именно данный код должен делать Смысла, если честно, не вижу в дампе.. И таки да, суть была в том, что у orders была связь один ко многим с orders_items через поле order_id в orders_items, что в принципе можно было понять по моделям, просто я явно не написал. ..понимаю лень и все такое, впредь буду писать).. Дак вот, в это поле order_id передавался всегда ноль за место ожидаемого ID, причем, повторюсь, все остальное писалось нормально. Цитата: кстати советую данные корзины хранить не так, а в singleton объекте или что наверное правильнее в модели(Kohana_Model) и дописать методы для работы с ней - получите универсальную корзину, Универсальность - это вы про такое: Код:
..счетчик для кол-во товаров ввиде плагина, если интересно посмотреть, позже выложу.. Если оно, то потихоньку все перевожу на такую схему.. Но даже в этом случае можно через сессии. Буду рад увидеть доводы хранения покупки не в сессии, а в объекте.. to all По поводу хранения данных корзины, кто что посоветует. Или кто как использует? ..возможно есть еще способы.. |
Автор: | WinterSilence [ 11 июн 2013, 11:10 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Цитата: почему $items = $order->items; неходится в цикле? это не есть гуд потому, что $order->items в цикле не изменяется т.ч. это бесполезная лишняя нагрузка. т.е. говнокод Цитата: Смысла, если честно, не вижу в дампе..И таки да, суть была в том, что у orders была связь один ко многим с orders_items через поле order_id в orders_items, что в принципе можно было понять по моделям, просто я явно не написал. сам себе помочь не хочешь? глупо Цитата: Но даже в этом случае можно через сессии. Буду рад увидеть доводы хранения покупки не в сессии, а в объекте.. я про сессии вообще ничего не говорил.я имел ввиду взаимодействуешь ты с корзиной ты через класс(вроде твоего последнего примера), а как уж он хранит данные дело другое. самый удачный вариант это хранить данные в Session-database, только под корзину сделать отдельные настройки, чтобы данные хранились по несколько дней т.к. часто бывает что клиент заходит, видит старый не оформленный товар в корзине и что-то из него покупает, по опыту знаю таких 5-10% если хочешь кидай свой класс сюда, совместными усилиями допилим |
Автор: | borodatych [ 11 июн 2013, 11:48 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Цитата: это не есть гуд потому, что $order->items в цикле не изменяется т.ч. это бесполезная лишняя нагрузка. т.е. говнокод Не соглашусь.. Код:
..а может и я чего не понимаю.. Цитата: sql дамп таблиц всегда пишите и что именно данный код должен делать Возможно я не правильно понял фразу. vardump имелось ввиду? Цитата: если хочешь кидай свой класс сюда, совместными усилиями допилим В принципе, весь код после события я привел.. Благодарю за участие) |
Автор: | WinterSilence [ 11 июн 2013, 13:42 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Цитата: Не соглашусь.. аргументируй Цитата: Возможно я не правильно понял фразу. vardump имелось ввиду? ошибка могла быть в структуре базы, тем более чтобы работать с данными надо понимать их структуру чуть позже по коду отпишусь |
Автор: | borodatych [ 11 июн 2013, 13:49 ] |
Заголовок сообщения: | Re: ORM один ко многим |
Цитата: аргументируй В коде старался от комментировать.. Цитата: ошибка могла быть в структуре базы, тем более чтобы работать с данными надо понимать их структуру Я же писал, что все работает, за исключением одного непонятного момента.. |
Страница 1 из 4 | Часовой пояс: UTC + 4 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |