繁体   English   中英

Laravel 每个用户只有一个friend_id

[英]Laravel only one friend_id per user

我只是从 laravel 开始,想知道是否有人可以提供帮助,我从数据库中创建了一个朋友 ID 和用户 ID,并在视图中创建了一个表格,将 user_id 添加到friend_id(不确定术语是什么但是XD)一切正常,但是每次我按下添加朋友按钮时,朋友用户都会重复,所以我的问题是如何在没有用户复制数据的情况下添加用户?

FriendsController

public function store(Request $request)
    {

        //check I have a post with a friend id
        $validator = Validator::make($request->all(), [
            'friend_id' => 'required'
        ]);

        if ($validator->fails()) {
            return redirect('/posts')
                ->withErrors($validator)
                ->withInput();
        }

        //get the current user
        $user = Auth::user();

        //attach friend to current user
        $data = [
            'friend_id' => $request->input('friend_id'),
            'user_id' => $user->id,
        ];
        

        $friend = $user->friends()->where('friend_id', $request->input('friend_id'))->get();


        $friend = $user->friends()->create($data);

        //redirect back to XXX        
        return redirect('/posts');      

    }

    <div class="row justify-content-md-center">
        <div class="col-3 mt-3">

            @foreach ($friends as $friend)

                <form method="post" action="/friends">
                    @csrf
                    <div class="text-center border p-2">
                        {{ $friend->id }}

                        {{ $friend->name }}
                    
                        <div class="row justify-content-center">
                            <button type="submit" name="friend_id" value="{{$friend->id}}"  class="btn btn-primary">Add Friend</button>
                        </div>
                    </div>                              
                </form>
            @endforeach
        </div>
    </div>

这是我老板的建议,它只在数据库中添加一个朋友 id

//check I have a post with a friend id
$validator = Validator::make($request->all(), [
'friend_id' => 'required'
]);

if ($validator->fails()) {
return redirect('/posts')
->withErrors($validator)
->withInput();
}

//get the current user
$user = Auth::user();

//attach friend to current user
$data = [
'friend_id' => $request->input('friend_id'),
'user_id' => $user->id,
];

$friend = $user->friends()->where('friend_id', $request->input('friend_id'))->get();

if(!$friend)
{
$friend = $user->friends()->create($data);
}

您可以使用 firstOrCreate 轻松完成此操作:

public function store(Request $request)
{
     $request->validate([
'friend_id' => 'required'
]);       

auth()->user()->friends()->firstOrCreate([
 'friend_id' => $request->friend_id
]);
}

但是逻辑有点不对,

正如我猜想的那样,您与用户 Model 的朋友()关系指的是 2 个用户之间的 pivot 表(有点)

你应该这样做:

Pivot表:

编号 | 用户 ID | 朋友ID

用户 Model:

public function friends(){
    return $this->belongsToMany(User::class, 'friends', 'user_id', 'friend_id');
}

然后在您的 controller 中:

auth()->user()->friends()->syncWithoutDetaching([$request->friend_id]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM