【问题标题】:Laravel model relationship producing wrong sql when I delete a model当我删除模型时,Laravel 模型关系产生错误的 sql
【发布时间】:2023-03-23 15:30:01
【问题描述】:

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

我有 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 中删除行?

我错过了什么?

谢谢。

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      相关资源
      最近更新 更多