【问题标题】:Doctrine cascade delete query?学说级联删除查询?
【发布时间】:2012-10-16 09:31:22
【问题描述】:

我正在使用以下查询删除数据库中的国家/地区,但由于国家/地区与城市之间存在一对多关系,因此出现外键错误。

我正在使用以下查询:

$cd = 1;
Doctrine_Core::getTable('country')->find($cd)->delete();

如果国家/地区没有任何孩子,则此查询软删除,但如果国家/地区有任何城市,则返回错误。

我在国家模式中也做了如下设置:

$this->hasMany('city', array(
'local' => 'id',
'foreign' => 'country_id',
'cascade' => 'delete'
));

请提出建议。

【问题讨论】:

    标签: mysql zend-framework orm doctrine doctrine-orm


    【解决方案1】:

    在 BaseCity.php 中,您应该与 Country 有关系。在:

    $this->hasOne('Country', array(
    ...
    

    添加这一行:

    "onDelete"=>"CASCADE"
    

    当您删除国家/地区时,城市也将被删除。如果你想保留它们,放

    "onDelete"=>"SET NULL"
    

    【讨论】:

    • @Zelijko :我按照您的建议使用“onDelete”=>“SET NULL”。我的两个模型都有 SOFTDELETE 行为。它设置父删除 = 1 但不设置子行 = 1(附加到父)
    【解决方案2】:

    我认为上面的方法也是正确的,但我用下面的方法解决了。

    我这样建立国家与城市的关系:

    $this->hasMany('city', array(
         'local' => 'id',
         'foreign' => 'country_id',
        'cascade' => array(
         0 => 'delete',
         )));
    

    在 YAML 文件中我这样添加: 级联:[删除]

    它成功了。

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2014-03-18
      • 1970-01-01
      • 2016-12-04
      • 2011-03-01
      • 2014-08-28
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多