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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: ORM, работа со связями
СообщениеДобавлено: 12 май 2013, 23:32 
Не в сети
Зеленый
Аватара пользователя

Зарегистрирован: 10 май 2013, 18:18
Сообщения: 7
Откуда: Tashkent
Перечитал пару мануалов, но так и не понял как правильно сделать нормальную связь таблиц

Имеется три таблицы:
`objects` => главная таблица
поля
id
name

В модели (Model_Object extends ORM):
Код:
   
protected $_has_many = array(
        'prices' => array(
         'model' => 'prices',
         'through' => 'objects_prices',
      ),
   );


`prices` => второстепенная таблица
id
name

В модели (class Model_Prices extends ORM):
Код:
   
   protected $_belongs_to = array(
      'object' => array(
         'model' => 'object',
         'through' => 'objects_prices',
      ),
   );


`objects_prices` => таблица связей
поля
object_id - id прайса
price_id - id объекта


Суть проблемы:
Код:
foreach(ORM::factory('prices')->find_all() as $item)
{
     echo $item->object->id;
}

Выдает: --- ERROR: Undefined index: object_id
Наверное я что-то не так делаю?
Как мне правильно получить id объекта из таблицы `objects`

Хочу еще отметить тот факт, что на добавление записей в таблицу price с помощью ORM и с привязкой к таблице objects проходит нормально:
Код:
$object = ORM::factory('object', $_POST['object_id']);

if(!$object->loaded())
   throw new Exception(__('object_not_found'));
   
$pricerow = ORM::factory('prices');
$pricerow->clear();   
               
$pricerow->name = 'test';
$pricerow->save();

$object->add('prices', $pricerow);
$object->save();


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

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
естественно ,вы же прайсы к объектам привязали, а вызываете наоборот. ваш пример работал бы вот так:
Код:
$obj = ORM::factory('object')->find_all();
foreach($obj as $item)
{
     echo $item->price->поле;
}

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


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

Зарегистрирован: 10 май 2013, 18:18
Сообщения: 7
Откуда: Tashkent
Это понятно. Как тогда правильно сделать 'двухсторонию' связь?
Чтобы при выводе записей из price получить id объекта?
Я уже запутался. (


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

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
документация по kohana orm http://kohana3.ru/module/orm
описание связи M:M через доп таблицу http://kohanaframework.org/3.0/guide/or ... ny-through

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


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

Зарегистрирован: 10 май 2013, 18:18
Сообщения: 7
Откуда: Tashkent
WinterSilence писал(а):
документация по kohana orm http://kohana3.ru/module/orm
описание связи M:M через доп таблицу http://kohanaframework.org/3.0/guide/or ... ny-through

Читал, но так и не понял до конца как именно "обратную" связь от таблицу price к object
Пробовал и так:
Код:
foreach(ORM::factory('prices')->find_all() as $it)
        {
            $it->object->find_all();
        }

Такая же ошибка

Я буду очень признателен, если укажите конкретные действия или по возможности расскажите как правильно выполнить это действие.


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

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

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


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

Зарегистрирован: 10 май 2013, 18:18
Сообщения: 7
Откуда: Tashkent
Версия 3.2


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

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Den.fm писал(а):
Перечитал пару мануалов, но так и не понял как правильно сделать нормальную связь таблиц

В модели (Model_Object extends ORM):
Код:
   
protected $_has_many = array(
        'prices' => array(
         'model' => 'prices',
         'through' => 'objects_prices',
      ),
   );


Плохо перечитали.
Повторите ещё раз.


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

Зарегистрирован: 10 май 2013, 18:18
Сообщения: 7
Откуда: Tashkent
Sergey писал(а):
Den.fm писал(а):
Перечитал пару мануалов, но так и не понял как правильно сделать нормальную связь таблиц

В модели (Model_Object extends ORM):
Код:
   
protected $_has_many = array(
        'prices' => array(
         'model' => 'prices',
         'through' => 'objects_prices',
      ),
   );


Плохо перечитали.
Повторите ещё раз.

Вроде все правильно.
Один Объект и к нему много записей привязаных из таблицы prices
И работает это все через код:
Код:
foreach(ORM::factory('object')->with('prices')->find_all() as $it)
        {
            $prices = $it->prices->find_all();
           
            if($prices->count() > 0)
            {
                echo $it->name;
                echo "<br/>";
               
                foreach($prices as $price)
                {
                    echo " - $price->name";
                    echo "<br/>"; 
                }
                echo "<hr/>"; 
            }
        }


Получилось вывести айди объекта следующим путем:
в моделе price:
Код:
      protected $_has_many = array(
      'object' => array(
         'model' => 'object',
         'through' => 'objects_prices',
            'foreign_key' => 'price_id',
      ),
   );


в контроллере:
Код:
foreach(ORM::factory('prices')->find_all() as $it)
        {
             echo $it->object->find()->id;
             echo '<br/>';
        }


Но, почему-то мне кажется has_many тут не к месту.. :roll: :shock:


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

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
А, так у вас с ORM трудности просто http://kohana3.ru/module/orm


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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


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

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


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

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