当删除模型时,Laravel模型关系产生错误的sql

时间:2015-09-03 18:26:50

标签: php laravel laravel-5

我正在构建一个拥有用户和用户角色的应用。用户可以拥有许多角色。

我有3个表格设置:

  • 用户
  • 作用
  • ROLE_USER

在我的user模型中,我有这个:

...

/**
 * Boot the model.
 *
 */
public static function boot()
{
    parent::boot();

    static::deleting(function($user)
    {
        $user->roles()->delete();
    });
}

/**
 * The roles that belong to the user.
 *
 * @return Object
 */
public function roles()
{
    return $this->belongsToMany('SimplyTimesheets\Models\User\Role')->withTimestamps();
}

...

当我删除用户时,我希望它也从role_user表中删除相关的行。

我的删除方法如下所示:

/**
 * Delete user.
 *
 * @param $id
 * @return mixed
 */
public function deleteUser($id)
{
    return $this->user->whereId($id)->delete();
}

但是,这会导致生成以下SQL:

delete `role` from `role` inner join `role_user` on `role`.`id` = `role_user`.`role_id` where `role`.`cust_id` = ? and `role_user`.`user_id` = ?

为什么要尝试从role表而不是role_user删除行?

我错过了什么?

感谢。

1 个答案:

答案 0 :(得分:3)

使用detach方法,而不是delete方法:

public static function boot()
{
    parent::boot();

    static::deleting(function($user)
    {
        $user->roles()->detach();
    });
}