Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将好友模型添加到属于多个关系的_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

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')后找不到