2013-08-05 4 views
0

Я пытаюсь настроить объект продукта в Kohana 3.3, используя встроенный ORM. Я хочу, чтобы это так, что, когда я называю:Kohana 3.3 ORM _has_many _belongs_to

$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». Если кто-то может объяснить иностранные или далеко, что может решить эту проблему, ха.

Любые предложения относительно того, где я могу испортиться?

Заранее спасибо.

ответ

2

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', 
    )); 
} 

Я надеюсь, что это ответили на ваш вопрос. Потратил меня на то, чтобы понять это.

 Смежные вопросы

  • Нет связанных вопросов^_^