2015-09-03 49 views
1

我正在構建一個具有用戶和用戶角色的應用程序。用戶可以有許多角色。Laravel模型關係在刪除模型時產生錯誤的sql

我有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(); 
} 

... 

當我刪除用戶,我想要它o也從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

我錯過了什麼?

謝謝。

回答

3

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

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

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

完美,謝謝。 – V4n1ll4