Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 14 ноя 2018, 02:11

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 13:39 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Цитата:
а это не так - этим действием ты просто копируешь пустую

Опять не соглашусь, надо было сразу брякнуть...
Код:
$order = ORM::factory('order');
$order->values($data);
try{
     $order->save();
     foreach($this->cart as $c){
           $items = $order->items;
           $this->e($items); // Моя бряк
           $item['order_id']        = $order->pk();
           $item['product_id']     = $c['p']->id;
           $item['product_price'] = $c['p']->price;
           $item['material_id']     = $c['m']->id;
           $item['material_price'] = $c['m']->price;
           $items->values($item)->save();
       }........

Получаю:
..извиняюсь за портянку, для полноты, может косяки повсплывают..
Код:
Model_Orderitems Object
(
    [_table_name:protected] => orders_items
    [_primary_key:protected] => id
    [_belongs_to:protected] => Array
        (
            [product] => Array
                (
                    [model] => product
                    [foreign_key] => product_id
                )

            [material] => Array
                (
                    [model] => material
                    [foreign_key] => material_id
                )

            [order] => Array
                (
                    [model] => order
                    [foreign_key] => order_id
                )

        )

    [_has_one:protected] => Array
        (
        )

    [_has_many:protected] => Array
        (
        )

    [_load_with:protected] => Array
        (
        )

    [_validation:protected] =>
    [_object:protected] => Array
        (
            [id] =>
            [order_id] =>
            [product_id] =>
            [product_price] =>
            [material_id] =>
            [material_price] =>
            [count] =>
        )

    [_changed:protected] => Array
        (
        )

    [_original_values:protected] => Array
        (
        )

    [_related:protected] => Array
        (
        )

    [_valid:protected] =>
    [_loaded:protected] =>
    [_saved:protected] =>
    [_sorting:protected] =>
    [_foreign_key_suffix:protected] => _id
    [_object_name:protected] => orderitems
    [_object_plural:protected] => orderitemses
    [_table_columns:protected] => Array
        (
            Удалил из-за массивности
        )

    [_updated_column:protected] =>
    [_created_column:protected] =>
    [_serialize_columns:protected] => Array
        (
        )

    [_primary_key_value:protected] =>
    [_table_names_plural:protected] => 1
    [_reload_on_wakeup:protected] => 1
    [_db:protected] => Database_MySQL Object
        (
            [_connection_id:protected] => e98693e293defee7604421beb1e2aed03a0fa182
            [_identifier:protected] => `
            [last_query] => SHOW FULL COLUMNS FROM `orders_items`
            [_instance:protected] => default
            [_connection:protected] => Resource id #106
            [_config:protected] => Array
                (
                    Конфиг
                )

        )

    [_db_group:protected] =>
    [_db_applied:protected] => Array
        (
        )

    [_db_pending:protected] => Array
        (
            [0] => Array
                (
                    [name] => where
                    [args] => Array
                        (
                            [0] => orderitems.order_id
                            [1] => =
                            [2] => 6
                        )

                )

        )

    [_db_reset:protected] => 1
    [_db_builder:protected] =>
    [_with_applied:protected] => Array
        (
        )

    [_cast_data:protected] => Array
        (
        )

    [_errors_filename:protected] => orderitems
)

Как мы видим это объект.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 14:57 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Аж заинтриговали) Но явно че-то перемудрили.
Помойму тут все проще:
Код:
$order = ORM::factory('order');
$order->values($data);
try{
     $order->save();
     $item = ORM::factory('items');
     foreach($this->cart as $c){
           $item->order_id      = $order->id;
           $item->product_id    = $c['p']->id;
           $item->product_price = $c['p']->price;
           // в общем какие там поля нужны
          ......

           $item->save();
       }........

И не нужен никакой $order->items; хотя можно попробовать вместо ORM::factory('items');

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 15:18 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Цитата:
ты просто копируешь пустую(т.е. с незаполненными полями данных) модель

Цитата:
Как мы видим это объект.

а модель что не объект что ли?

AmberLEX> об этом и речь

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 15:43 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
to AmberLEX

Ну, во первых вы вынесли из цикла -сохраняются последние обработанные данные, а во вторых:
Код:
$order = ORM::factory('order');
...
$item = ORM::factory('items');
...

Аналогично:
Код:
$order = ORM::factory('order');
...
$items = $order->items;
...

Мне первое так и так вызывать, так что для моей ситуации равнозначное решение.

to WinterSilence

Из прошло - выше:
Я - И вот тут мы в цикле создаем новый пустой объект(единицу покупки) через связь в ORM!
Вы - почему ты уверен что он у тебя каждый раз новый создается?
Я - Ну а как еще? Это же ООП. На сколько могу судить - создается новый пустой объект, разве нет?
Вы - этим действием ты просто копируешь пустую(т.е. с незаполненными полями данных) модель
..и тут я вошел в ступор.. и предположил что вы про строку/массив/или еще чего там пишите..


А разве копирование - это не создание нового? По моему да. Я так и написал сперва.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 15:53 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
создание и "копирование" разные вещи.

что проще еще одного тебя вырастить и воспитать или сделать твой клон?

ты кстати в курсе чем скажем $new = $obj; от $new = clone $obj; отличается?

Цитата:
Ну, во первых вы вынесли из цикла -сохраняются последние обработанные данные

я объяснил уже как этого избежать

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

я уже приводил тут пример для проверки своего знания php, что вернет строка, вернее даже почему именно такой результат
Код:
echo 1 - 0.5,print('1*5') + 1 - "2";


пока ответы на такие вопросы не найдешь все твое программирование будет напоминать плутание в дебрях

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 16:24 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Цитата:
создание и "копирование" разные вещи.

Почему вы уверены, что происходит клонирование объекта, а не создание?
То есть по вашему Kohana при связи создает один пустой объект и потом при каждом обращении клонирует его?
..по моему бред..
Возможно то что в system, кроме:
Код:
/system/classes/Kohana/Validation.php
/system/guide/kohana/tutorials/git.md // Вообще ни какого отношения
/system/tests/kohana/ConfigTest.php

более ни где не встречается clone, будет убедительным доводом, что идет именно создание нового объекта.
Код:
echo 1 - 0.5,print('1*5') + 1 - "2";

Это конечно еще тот примерчик, да и к текущей теме не относится.
Это из ряда ребусов, нежели повседневной работы.
В школе тоже были олимпиады, где много было выходящего за кругозор, что не использовалось в жизни.
Цитата:
я уже приводил тут пример для проверки своего знания php

Сами то вы можете рассказать что тут происходит?
И хотя бы парочку примеров, где это может повстречаться и для чего такое нужно использовать?
Цитата:
ты кстати в курсе чем скажем $new = $obj; от $new = clone $obj; отличается?

В курсе


Последний раз редактировалось borodatych 12 июн 2013, 16:26, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 16:26 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Цитата:
Ну, во первых вы вынесли из цикла -сохраняются последние обработанные данные
Так работает мой вариант или нет?

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 16:26 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
нет, если внести в цикл, то да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 16:29 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
У вас orders к items - один-ко-многим
Вы берете каждый товар из корзины и сохраняете каждый в items для order одного order
так?

_________________
http://de-en.info (работает на Kohana 3.3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ORM один ко многим
СообщениеДобавлено: 12 июн 2013, 16:30 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Прототип, (англ. Prototype) — порождающий шаблон проектирования.
Задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые объекты путём копирования этого прототипа.
Проще говоря, это паттерн создания объекта через клонирование другого объекта вместо создания через конструктор.
Паттерн используется чтобы:
- избежать дополнительных усилий по созданию объекта стандартным путем (имеется в виду использование конструктора, т. к. в этом случае также будут вызваны конструкторы всей иерархии предков объекта), когда это непозволительно дорого для приложения.
http://ru.wikipedia.org/wiki/%D0%9F%D1% ... 8%D1%8F%29

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group