FuelPHP:级联删除不起作用


FuelPHP: Cascading Delete Not Working

我有两个表。一个是类别,该类别有许多提名。

表类别

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,它也不会删除提名表中的提名条目。我错过了什么?

您的逻辑是错误的。

在您的示例中,$q是一个ORM查询对象,因此delete只运行一个删除查询: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;
}