FuelPHP:级联删除不起作用

时间:2015-02-05 10:40:34

标签: php fuelphp

我有两张桌子。一个是类别,该类别有多个提名。

表类别

protected static $_has_many = array(
        'nominations' => array(
            'key_from' => 'id',
            'key_to'   => 'category_id',
            'model_to' => 'Model_Nominations',
            'cascade_save'  => true,
            'cascade_delete'=> true
        )
);

表格提名

protected static $_belongs_to = array(
        'categories' => array(
            'key_from'      => 'category_id',
            'key_to'        => 'id',
            'model_to'      => 'Model_Categories',
            'cascade_save'  => true,
            'cascade_delete'=> true
        )
);

当我删除类别时:

public static function delete_($args)
{
        $q = Model_Categories::query()
                ->where('id','=',$args['id']);
        if($q->count() > 0){
            $q->delete();
            return true;
        }
        return false;
}

即使cascade_delete设置为true,它也不会删除提名表中的提名条目。我错过了什么?

1 个答案:

答案 0 :(得分:2)

你的逻辑错了。

在您的示例中,$q是一个ORM查询对象,因此删除只会运行删除查询:DELETE FROM categories WHERE id = ?

如果要删除对象及其关系,则需要使用它的关系获取模型对象。它不会级联到未加载的关系中。

public static function delete_($args)
{
    if ($result = Model_Categories::find($args['id'], array('related'=>array('nominations')))
    {
        return $result->delete();
    }
    return false;
}