ORM

Модератор
#
Re: ORM
31gorod,
в модели указать
protected $_marksDeleted = NULL;
#
Re: ORM
таблица
`test_modules` (
  `id` int(11) NOT NULL auto_increment,
  `module_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
)

Содержит значения
(1, 24),
(2, 25),
(3, 54),
(4, 70);

modules/test/module/model.php


class Test_Module_Model extends Core_Entity
{
   protected $_marksDeleted = NULL;
   
   protected $_belongsTo = array('module' => array(
                  'foreign_key' => 'module_id'
   ));
      
   /**
    * Constructor.
    */
   public function __construct($id = NULL)
   {
      parent::__construct($id);
   }   
}


test/index.php


$objects = Core_ORM::factory('Test_Module')->findAll();
foreach($objects as $object)
echo $object->module->name;


Код отрабатывает и выводит "Страницы и документыСтруктура сайтаИнформационные системыИнтернет-магазин"

ДАЛЕЕ


таблица
`test_tabs` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(150) NOT NULL,
  `value` varchar(254) default NULL,
  `test_module_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
)

содержит
(1, 'имя', NULL, 1),
(2, 'описание', NULL, 2);

создаю модель
modules/test/tab/model.php

class Test_Tab_Model extends Core_Entity
{

   protected $_marksDeleted = NULL;
   
   protected $_belongsTo = array('Test_Module' => array(
                  'foreign_key' => 'test_module_id'
   ));
      
   /**
    * Constructor.
    */
   public function __construct($id = NULL)
   {
      parent::__construct($id);
   }   
}


test/index.php


$objects = Core_ORM::factory('Test_Tab')->findAll();
foreach($objects as $object)
echo $object->test_module->id;


Выводит "Exception: The property 'test_module' does not exist in the model 'test_tab'"

Что не так? Подскажите почему не получается связать 2 таблицы?
#
Re: ORM
В именовании моделей не использую символ подчеркивания (там где я видел)
смею предположить что нужно загрузить данные
$obj = $object->test_module->findAll();

разработка сайтов, фирменных стилей, интерфейсов
#
Re: ORM
Здесь, например, используется
/modules/informationsystem/group/model.php

Цитата:

$obj = $object->test_module->findAll();


это даст нам ту же ошибку..
Модератор
#
Re: ORM
Как минимум индекс неправильно написан, не
array('Test_Module' => ...
а
array('test_module' => ...

Кроме того у `test_modules` будет еще связь has many к `test_tabs`

И еще, где имена внешних ключей явно вытекают из имен связываемых моделей, можно явно не указывать их в связи.
Например, просто
protected $_belongsTo = array('module' => array());
#
Re: ORM
Заработало)
Спасибо, немного прояснилась ситуация, но
Цитата:
Кроме того у `test_modules` будет еще связь has many к `test_tabs`

у modules/module/model.php в классе не было ничего прописано, просто пишем в test/module/model.php
protected $_belongsTo = array('module' => array(
                  'foreign_key' => 'module_id'

и все работает. Почему же в modules/module/model.php не нужно прописывать связь has many, или просто прописывание has many не обязательно?
#
Re: ORM
Каким образом получить доступ к имени модуля через объект 'Test_Tab'?
В общем по логике вот так

$objects = Core_ORM::factory('Test_Tab')->findAll();
foreach($objects as $object)
echo $object->test_module->module->name;

но так не работает. Вообще возможно ли это? Или это возможно только через соответствующий метод объекта 'Test_Module'?
Модератор
#
Re: ORM
31gorod писал(а):
Почему же в modules/module/model.php не нужно прописывать связь has many?

с чего Вы взяли, что не нужно. Как только Вам понадобится сделать
$aTest_Tabs = Core_ORM::factory('Test_Module', 123)->Test_Tabs->findAll();
придется связь прописать.
Модератор
#
Re: ORM
31gorod писал(а):
Каким образом получить доступ к имени модуля через объект 'Test_Tab'?

Вы все правильно написали:
$object->Test_Module->Module->name;

Вероятно не хватает одной из связей. Какой текст ошибки?
#
Re: ORM
Извиняюсь, поспешил. Спасибо, все работает!
Авторизация