Php 将好友模型添加到属于多个关系的
桌友:Php 将好友模型添加到属于多个关系的,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,桌友: $table->integer('user_id'); 表friend\u用户: $table->integer('user_id'); $table->integer('friend_id'); $table->primary(['user_id', 'friend_id']); 用户模型: public function friends() { return $this->belongsToMany(User::class, 'friend_
$table->integer('user_id');
表friend\u用户:
$table->integer('user_id');
$table->integer('friend_id');
$table->primary(['user_id', 'friend_id']);
用户模型:
public function friends()
{
return $this->belongsToMany(User::class, 'friend_user', 'user_id', 'friend_id');
}
用户控制器:
public function getAddFriend(User $user)
{
Auth::user()->friends()->attach($user->id);
return redirect()->back();
}
为什么如果我在attach()
中写入$user->id
,数据不会插入表friend\u user
,但是如果我在attach()
中写入id(1、2或其他),数据会插入表friend\u user
单击后如何在表
friend\u user
中添加数据?我认为潜在的问题是模型绑定,我假设您的路由有一个名为user的参数。然后我将在AppServiceProvider.php
或RouteServiceProvider.php
boot()
方法中明确定义您的模型绑定
use Illuminate\Support\Facades\Route;
Route::model('user', User::class);
您确定
$user->id
包含您认为它包含的数据吗?尝试添加($user)如果您的模型绑定设置不正确,它将返回一个空模型当在attach中写入id数(1、2或其他)时,数据插入表friend\u user,因此我写入了$user->id。是的,但我认为您的模型绑定不起作用,尝试添加($user); 看看它印的是什么?你是如何定义你的路线的?只是一个旁注,你在这里有一个相当复杂的关系。如果用户A
将用户B
添加为好友,$userA->friends
将包含用户B
,但$userB->friends
将不包含用户A
。您必须附加两次Auth::user()->friends()->attach($user->id)
和$user->friends()->attach(Auth::user()->id)代码>(从技术上讲,这是数据的重复),或者将关系修改为双向关系(这也相当复杂)。我尝试编写此代码,但收到错误:一般错误:1364字段“first_name”没有默认值````公共函数getAddFriend(User$User){Auth::User()->friends()->attach($User->id);Auth::user()->friends()->save($user);return redirect()->back();}``用一个建议更新了我的答案,但是发布你的路线,我会调整它。你不要在多对多
上使用save()
,因为这两条记录在你将它们与附加()
关联之前应该已经存在于数据库中。事实上,我想说的是,你永远不应该在多对多的数据透视表上使用save()
,除非你有一个数据透视表的模型(这也是不推荐的,但在一些偏远的情况下是必要的),先生,你说得对,在创建新模型时使用该模型非常常见:)我有一个错误:Class'App\Providers\Route'在添加Route::model('user',user::Class')后找不到。