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

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 28 мар 2024, 18:57

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




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

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
И вы написали $item->order_id = $order->id;

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


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

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
borodatych> про то "да зачем это надо?" ты при международной сертификации узнаешь или при трудоустройстве куда-нибудь покруче вебстудии в полтора землекопа. эти примеры хоть и абстрактны, но показывают уровень твоего понимания происходящего.
а он такой, что ты вместо того чтобы посмотреть код гадаешь на кофейной гуще

http://kohanaframework.org/3.3/guide-api/ORM#get
Код:
public function get($column)
{
    if (array_key_exists($column, $this->_object))
    {
        return (in_array($column, $this->_serialize_columns))
            ? $this->_unserialize_value($this->_object[$column])
            : $this->_object[$column];
    }
...
    elseif (isset($this->_has_many[$column]))
    {
        $model = ORM::factory($this->_has_many[$column]['model']);


Цитата:
Почему вы уверены, что происходит клонирование объекта, а не создание?

Цитата:
В курсе

не в курсе, клонирования там не происходит

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


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

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
тогда так
...
$item->save();
$item->clear();

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


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

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
Эмуляция)
Код:
class Controller_Welcome extends Controller {

    public function action_index()
    {
        $data = array(
            'name' => Text::random()
        );

        $order = ORM::factory('Order');
        $order->values($data);

        try
        
{
            $order->save();

            $cart = array(
                array('price' => Text::random('numeric', 4)),
                array('price' => Text::random('numeric', 4)),
                array('price' => Text::random('numeric', 4)),
            );

            $item = ORM::factory('Item');
            
//$item = $order->items;

            foreach($cart as $c)
            {
                $item->order_id = $order->id;
                $item->price    = $c['price'];

                $item->save()->clear();
            }
        }
        catch (ORM_Validation_Exception $e) {}


        // Shows
        //
        foreach (ORM::factory('Order')->find_all() as $o)
        {
            echo '<br>' . $o->name . '<br>';

            foreach ($o->items->find_all() as $i)
                echo $i->price . '<br>';
        }
    }

}
 // End Welcome
 

Код:
class Model_Order extends ORM {

    protected $_has_many = array(
        'items' => array(
            'model'       => 'Item',
            'foreign_key' => 'order_id',
        ),
    );
}

class Model_Item extends ORM {} 

Код:
-- Adminer 3.7.0 MySQL dump

SET NAMES utf8;
SET foreign_key_checks = 0;
SET time_zone = '+03:00';
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `order_id` int(10) unsigned NOT NULL,
  `price` float NOT NULL,
  PRIMARY KEY (`id`),
  KEY `order_id` (`order_id`),
  CONSTRAINT `items_ibfk_2` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `items` (`id`, `order_id`, `price`) VALUES
(1,   1,   10),
(2,   1,   20);

DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `orders` (`id`, `name`) VALUES
(1,   'name-1'),
(2,   'name-2');

-- 2013-06-12 15:55:13

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


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

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
to AmberLEX
В точку. clear. Исправил свой говнокод.
to WinterSilence
Благодарю за дискуссию. Над примером позже подумаю.
А клонированием я пользуюсь в гуйках на ява, так что есть понимание, что такое клонирование.

to All
Почему все же автоматом не пишется поле order_id в таблицу orders_items?


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

Зарегистрирован: 05 июн 2012, 03:08
Сообщения: 213
$item - обычный объект со свойством order_id, откуда ему знать что вы хотите туда записать.
Вдруг вы так захотите:
Код:
            $item $order->items;

            foreach(
$cart as $c)
            {
                
$item->order_id 2;
                
$item->price    $c['price'];

                
$item->save()->clear();

                
$item->order_id $order->id;
                
$item->price    $c['price'];

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

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


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

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
borodatych> разные языки реализуют не всегда одинаково, Java это чистый ООП язык, в то время как PHP еще не до конца

AmberLEX> или можно добавить связь с orders в items, хотя не уверен - все никак до орма не доберусь =\

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


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

Зарегистрирован: 23 июл 2012, 21:58
Сообщения: 100
Всех благодарю за участие.


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

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


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

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


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

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