2017-03-16 64 views
1

我試圖刪除的用戶類別,如爲:如何刪除用戶的類別?

Category::with('user', Auth::user()->id)->where("user_id", $id)->delete(); 

分類模式有關係:

public function user() 
{ 
    return $this->belongsTo('App\User', 'user_id', 'id'); 
} 

但它不爲我工作

User model

public function categories() 
    { 
     return $this->belongsToMany('App\Category'); 
    } 

回答

3

嘗試不帶():

Category::where("user_id", $id)->delete(); 

更新用戶模型代碼添加後:

一個belongsToMany關係的倒數是另一個belongsToMany,一個屬於關聯的倒數爲的hasManyhasOne

你必須決定用戶,並且希望類別之間的關係至極,引起屬於關聯不工作方式與逆belongsToMany

從你寫的答案和評論似乎你想要一個多對多的關係(你有一箇中間表)在這種情況下,你必須在兩個模型中使用belongsToMany,然後你可以使用這段代碼刪除用戶類別assignement:

$user->categories()->detach() 
+0

然後返回我:'SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'user_id'(SQL:從'categories'中刪除,其中'user_id' = 1)' – Darama

+0

如果分類模型屬於給用戶,就像你在你的代碼中寫的那樣,類別表應該有一個列user_id – dparoli

+0

我有三個表:User,Categories,User_categories,所以我需要從User_categories表中刪除 – Darama

0

我認爲你需要充實他們將如何相關。現在,根據你的關係代碼,Categories表中應該有一個user_id

這是類型模型之間的關係應該是什麼樣子:

public function users() 
{ 
    return $this->belongsToMany(User::class); 
} 

而你需要一個名爲category_user一個表,讓這一關係。這裏的遷移是什麼樣子的例子:

Schema::create('category_user', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('category_id')->unsigned(); 
    $table->integer('user_id')->unsigned(); 
    $table->timestamps(); 

    $table->foreign('category_id')->references('id')->on('categories'); 
    $table->foreign('user_id')->references('id')->on('users'); 
}) 

然後,你可以將用戶添加到類別在以下幾個方面:

$category->users()->attach(Auth::id()); 
Auth::user()->categories()->attach([ 1, 2, 3 ... ]); 

,並刪除:

$category->users()->detach(Auth::id()); 
Auth::user()->categories()->detach([ 1, 2, 3 ... ]); 

您也可以使用sync,它可以分離不在陣列上的任何元素,並附加當前未連接的任何元素:

Auth::user()->categories()->sync([ 1, 2, 3, ... ]);