Kohana 3.3 ORM _has_many _belongs_to

时间:2013-08-05 20:24:51

标签: orm kohana-3 kohana-orm

我正在尝试使用内置的ORM在Kohana 3.3中设置产品对象。我想要它,以便在我打电话时:

    $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 个答案:

答案 0 :(得分:2)

Foreign keythis对象的关键。其中包含有关关系的数据。

Far keyother对象的关键字。其中包含有关关系的数据。那把钥匙是“遥远的”

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

我希望这能回答你的问题。我花了一些时间才弄明白。