我尝试删除用户类别,如:
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');
}
答案 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, ... ]);