2017-03-16 70 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, ... ]);