[英]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.