Oop 在Yii中实现GUID
如果您有一个数据模型,其中一个表是Oop 在Yii中实现GUID,oop,design-patterns,yii,Oop,Design Patterns,Yii,如果您有一个数据模型,其中一个表是guid表,只有guid列,并且许多表都有一个主键引用guid,您建议如何将这种类型的逻辑合并到Yii中?要创建任何guidable对象的新模型,必须首先创建guid。这种逻辑应该放在哪里 编辑:更具体地说,以下是我面临的问题: 我有一个guid表,tbl\u guid,其中一列是MySQLBIGINT 一些表,如tbl\u foo,在tbl\u guid Foo模型具有关系self::属于'Guid'、'Guid' 在我明确准备创建Foo 我想以某种方式延迟
guid
表,只有guid
列,并且许多表都有一个主键引用guid
,您建议如何将这种类型的逻辑合并到Yii中?要创建任何guid
able对象的新模型,必须首先创建guid
。这种逻辑应该放在哪里
编辑:更具体地说,以下是我面临的问题:
- 我有一个guid表,
,其中一列是MySQLtbl\u guid
BIGINT
- 一些表,如
,在tbl\u foo
tbl\u guid
模型具有关系Foo
self::属于'Guid'、'Guid'
- 在我明确准备创建
Foo
- 我想以某种方式延迟保存我的
,直到我实际保存(并已验证)guid
Foo
- 但是,
从不验证,因为它没有guidFoo
- 我们如何强制
遵守一些接口,这样我们就不必加入一堆条件来检查所有者
是否有属性或方法等所有者
- 即使数据库不接受
的guid
,从所需属性列表中删除null
似乎仍然是错误的guid
继承。如果您刚才实现了我的BaseModel代码,则可以重写BaseModel中的
\uu construct()
方法来创建GUID类的实例
基本模型:
public function __construct()
{
parent::__construct();
$newGuid = new GUID();
return $this;
}
请参见继承。如果您刚才实现了我的BaseModel代码,则可以重写BaseModel中的
\uu construct()
方法来创建GUID类的实例
基本模型:
public function __construct()
{
parent::__construct();
$newGuid = new GUID();
return $this;
}
请参见这是我能想到的最好的方法: 为
guid
able模型创建新的CActiveRecordBehavior
:
public function beforeSave() {
if (!$this->owner->guid) {
$guid = new Guid;
$guid->save();
$this->owner->guid = $guid->guid;
}
}
将行为附加到模型上,或在模型的行为
数组中定义它
public function init() {
$behavior = new GuidBehavior;
$this->attachBehavior('GuidBehavior', $behavior);
}
删除所需的guid
,以便验证不会失败:
array('name', 'required'), //guid isn't here
试验
这是我能想到的最好的: 为
guid
able模型创建新的CActiveRecordBehavior
:
public function beforeSave() {
if (!$this->owner->guid) {
$guid = new Guid;
$guid->save();
$this->owner->guid = $guid->guid;
}
}
将行为附加到模型上,或在模型的行为
数组中定义它
public function init() {
$behavior = new GuidBehavior;
$this->attachBehavior('GuidBehavior', $behavior);
}
删除所需的guid
,以便验证不会失败:
array('name', 'required'), //guid isn't here
试验
因此,如果我走继承路线,假设我正在创建一个模型,但我不一定打算
save()
it。如果我在构造函数中创建guid
(并且不保存)时花了整整九码的时间,这难道不会导致一堆未使用的guid吗?我明白了。如果我这样做,当我调用$model->save()
时,如果GUID被定义为一个关系,我是否足够“聪明”地知道首先保存GUID?另外,重写\u construct()
会给我带来无限循环。。。你是说init()
?所以,如果我走继承路线,假设我正在创建一个模型,但我不一定打算save()
它。如果我在构造函数中创建guid
(并且不保存)时花了整整九码的时间,这难道不会导致一堆未使用的guid吗?我明白了。如果我这样做,当我调用$model->save()
时,如果GUID被定义为一个关系,我是否足够“聪明”地知道首先保存GUID?另外,重写\u construct()
会给我带来无限循环。。。你是说init()
?