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

kohana ORM - add new record for has_many, has_one relationships

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

  1. has_one
  2. has_many
  3. has_many_through

比如我定义如下:

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

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

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

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

问题的关键是在每个 has_manyhas_one 的 "other" 一侧是一个 belongs_to。这是保存信息的模型。

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

$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 = ...;