CakePHP 3.0.0级联依赖删除

时间:2015-04-26 11:21:31

标签: cascade cakephp-3.0

如果我在某些型号表中有以下内容; As,Bs,Cs和Ds。

他们定义了这些关联:

非稳态

$this->hasOne('Bs', [
  'dependent' => true,
  'cascadeCallbacks' => true,
]);

BsTable:

$this->belongsTo('As', [
  'foreignKey' => 'A_id',
]);
$this->hasMany('Cs', [
  'foreignKey' => 'B_id',
  'dependent' => true,
  'cascadeCallbacks' => true,
]);

CsTable:

$this->belongsTo('Bs', [
  'foreignKey' => 'B_id',
]);
$this->hasMany('Ds', [
  'foreignKey' => 'C_id',
  'dependent' => true,
  'cascadeCallbacks' => true,
]);

DsTable:

$this->belongsTo('Cs', [
  'foreignKey' => 'C_id',
]);

删除A现在删除A,B和任何链接的C,但Ds仍然存在。

删除C会导致链接的Ds被删除。

为什么不删除A也删除链接到被删除的C的Ds?

我怎么能这样做呢?

编辑: 蛋糕精确版3.0.0

查看debugkit sql日志中的SQL,似乎序列对我来说是错误的。

select from Bs where A_id = a_id (finds record with id "b_id")
delete from Cs where B_id = b_id 
select from Cs where B_id = b_id 
delete from Bs where id = b_id 
delete from A where id = a_id

(替换了表名和id以便于阅读)

根本不接触D,显然因为它在选择之前从Cs中删除了,所以永远不会让id(s)能够在D中找到任何东西。

非常困惑!

1 个答案:

答案 0 :(得分:0)

尝试将CakePHP安装升级到最新的3.0稳定版本