kohana ORM - 为has_many,has_one关系添加新记录

时间:2015-02-16 07:36:42

标签: orm kohana kohana-orm kohana-3.3

Kohana ORM在模型之间有以下关系:

  1. has_one
  2. has_many
  3. has_many_through
  4. 例如,我有以下定义:

    class Model_ORM_Text extends ORM {
    
        protected $_has_one = array(
            'compiledData' => array('model' => 'CompiledText', 'foreign_key' => 'idText'),
        );
    
        protected $_has_many = array(
            'translations' => array('model' => 'TextTranslation', 'foreign_key' => 'idText')
        );
    
        protected $_has_many_through = array(
            'tags' => array('model' => 'TextTranslation', 'through' => 'rl_text_tags')
        );
    }
    

    我需要为每个关系创建一个新的相关模型。我只在add类中找到ORM方法,允许添加通过has_many_through关系链接的相关模型,如下所示:

    $text->add("tags", $tagId);
    

    但我无法在任何地方找到如何为has_one和简单has_many关系添加相关模型。有可能吗?

1 个答案:

答案 0 :(得分:1)

问题的关键在于,每个has_manyhas_one的“其他”方面都是belongs_to。这是保存信息的模型。

在您的情况下,Model_CompiledText包含idText列(在特定别名下)。要(取消)设置关系,您需要操纵此字段。假设您在名称belongs_to下有一个text,您就是这样做的:

$compiledText = ORM::factory('CompiledText');

// set text
// Version 1
$compiledText->text = ORM::factory('Text', $specificId);
// Version 2
$compiledText->text = ORM::factory('Text')->where('specificColumn', '=', 'specificValue')
    ->find();

// unset text
$compiledText->text = null

// save
$compiledText->save();

如果是has_one,您可以通过父母直接访问它,

也是如此
$text->compiledData->text = ...;