如何删除用户类别?

时间:2017-03-16 22:14:17

标签: laravel laravel-5 laravel-5.4

我尝试删除用户类别,如:

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');
    }

2 个答案:

答案 0 :(得分:3)

尝试不使用():

Category::where("user_id", $id)->delete();
添加用户模型代码后

更新

belongsToMany 关系的倒数是另一个 belongsToMany belongsTo 的倒数是 hasMany 或a hasOne

你必须决定你想要的用户和类别之间的关系,导致 belongsTo 不能使用逆 belongsToMany

从你在答案和评论中写的内容看来你想要多对多关系(你有一个中间表)在这种情况下你必须在两个模型中使用 belongsToMany 然后你可以使用此代码删除用户类别分配:

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

答案 1 :(得分:0)

我认为你需要充实他们的关系。现在,根据您的关系代码,Categories表中应该包含user_id

这就是Category模型上的关系应该是这样的:

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, ... ]);