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

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

Другие вопросы по тегам