Kohana 3.3 ORM _has_many _belongs_to
Я пытаюсь настроить объект продукта в Kohana 3.3, используя встроенный ORM. Я так хочу чтобы при звонке
$p1 = ORM::factory('product')
->where('product_type', '=', '1')
->find_all();
это создаст объект этой структуры:
Model_Product Object
(
[_long_list_of_kohana_properties] => Array ()
[_object:protected] => Array
(
[id] => 2
[product_type] => 1
...
[product_attributes] => Array (List of attributes)
)
)
В настоящее время он производит это:
Model_Product Object
(
[_long_list_of_kohana_properties] => Array ()
[_object:protected] => Array
(
[id] => 2
[product_type] => 1
...
)
)
Это соответствующий код для объектов и _has_many / _belongs_to:
class Model_Product extends ORM
{
protected $_db = 'default';
protected $_table_name = 'product';
protected $_primary_key = 'id';
protected $_table_columns = array(
'id',
'product_type',
...
);
protected $_has_many = array(
'product_attributes' => array(
'model' => 'productAttributes',
'foreign_key' => 'product_id',
'far_key' => 'id',
)
);
}
class Model_ProductAttribute extends ORM
{
protected $_db = 'default';
protected $_table_name = 'productAttributes';
protected $_primary_key = 'id';
protected $_table_columns = array(
'id',
'product_id',
'attribute_name',
'attribute_value',
);
protected $_belongs_to = array('product' => array(
'model' => 'product',
'foreign_key' => 'product_id',
'far_key' => 'product_id',
)
);
}
Я не могу найти правильную комбинацию значений foreign_key и far_key для этой работы... Кроме того, я не могу найти хорошего объяснения цели "far_key". Если кто-то может объяснить иностранное против дальнего, что может решить эту проблему, ха.
Любые предложения относительно того, где я мог бы испортить?
Заранее спасибо.
1 ответ
Foreign key
это ключ на this
объект. Это содержит данные об отношениях.
Far key
это ключ на other
объект. Это содержит данные об отношениях. Этот ключ "далеко"
В has_many
отношения, другие объекты "принадлежат" этому объекту. Эти объекты имеют ключ, который относится к this
, Таким образом far key
должно быть 'product_id'
и внешний ключ не влияет на эти отношения. Как нет (и не может быть) ключ на this
объект, который указывает на тысячи объектов атрибута. Таким образом:
class Model_Product extends ORM {
protected $_has_many = array(
'product_attributes' => array(
'model' => 'productAttributes',
'far_key' => 'product_id',
));
}
В belongs_to
отношения. this
объект имеет ключ, который указывает на это parent
(или что угодно). Таким образом, локальный ключ (foreign_key
) должно быть product_id
и far_key
не имеет никакого влияния на эти отношения. Поскольку нет другого (и не может быть) ключа на другом объекте, который указывает на все его дочерние элементы. Таким образом:
class Model_ProductAttribute extends ORM {
protected $_belongs_to = array('product' => array(
'model' => 'product',
'foreign_key' => 'product_id',
'far_key' => 'product_id',
));
}
Я надеюсь, что это ответило на ваш вопрос. Мне понадобилось время, чтобы понять это.