kohana ORM - 为 has_many、has_one 关系添加新记录
kohana ORM - add new record for has_many, has_one relationships
Kohana ORM 在模型之间有以下关系:
- has_one
- has_many
- 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_many
和 has_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 = ...;
Kohana ORM 在模型之间有以下关系:
- has_one
- has_many
- 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_many
和 has_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 = ...;