laravel - 在 Laravel 中将用户分配到任何商店时遇到问题
问题描述
我在将用户分配到任何商店时遇到问题。我创建Shop A
并Shop B
希望将用户分配给每个商店。当我将任何用户分配给Shop A
. 但是,当我尝试将用户分配给 时Shop B
,用户总是进入Shop A
not Shop B
。
// 我的User
模型
public function shop()
{
return $this->belongsTo(\App\Shop::class, 'user_id');
}
// 我的Shop
模型
public function user()
{
return $this->hasMany(\App\User::class, 'user_id');
}
// 我的UserController
public function index()
{
$users = User::all();
$shops = Shop::all();
// return view('user', compact('users', 'shops'));
return UserResource::collection($users);
}
public function create(Request $request)
{
$request->validate([
'name' => 'required',
'email' => 'required',
'password' => 'required',
]);
$user = new user();
$user->user_id = auth()->user()->id;
$user->name = $request->name;
$user->email = $request->email;
$user->password = bcrypt($request->password);
$user->save();
return new UserResource($user);
}
// 我的User.blade.php
代码
@extends('layouts.app')
@section('content')
<div class="container" style="width: 50%">
<h2>Create User</h2>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="user" method="POST">
@csrf
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control">
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="text" name="email" class="form-control" >
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" name="password">
</div>
<div class="form-group">
<label for="shop">Shop</label>
<select name="shops" class="form-control">
@foreach($shops as $shop)
<option value="{{ $shop->id }}">
{{ $shop->name }}
</option>
@endforeach
</select>
</div>
<button class="btn btn-primary">Submit</button>
</form>
</div>
@endsection
我做错了Relationship
什么吗?
解决方案
Shop
从模型到模型,您有两个不同的关系User
。
// 店铺模型
public function users()
{
return $this->hasMany(\App\User::class);
}
public function owner()
{
return $this->belongTo(\App\User::class);
}
如果在您的控制器中,您想将商店分配给创建的用户
public function create(Request $request)
{
$request->validate([
'name' => 'required',
'email' => 'required',
'password' => 'required',
]);
$user = new user();
$user->user_id = auth()->user()->id;
$user->shop_id = $request->shops;
$user->name = $request->name;
$user->email = $request->email;
$user->password = bcrypt($request->password);
$user->save();
return new UserResource($user);
}
对于User
Model,需要用Shop
Model定义两种不同的关系
public function shop()
{
return $this->belongsTo(\App\Shop::class); //remove the foreign key or change it to 'shop_id'
}
public function ownedShops()
{
return $this->hasMany(\App\Shop::class);
}
推荐阅读
- r - 正态分布bayesAB - 负均值
- r - 使用循环序列的值创建和命名新变量
- salesforce - NLP算法可以在Force.com平台上运行吗?
- groovy - java.lang.ClassCastException:将两个数字作为字符串进行比较时抛出 geb.content.TemplateDerivedPageContent
- javascript - 如何使用 Javascript/jQuery 从 FTP 服务器强制下载而不是在 Chrome 中打开 srt 文件?
- r - 找到偶数个字符的最长单词
- javascript - 更改 contentEditable div 后如何制作可点击的链接?
- javascript - THREE.PointerLockControls 没有锁定我的指针
- android - 为什么我的 ValueEventListener 不起作用?
- django - GUnicorn 和 Django 用于资源有限的 500 个并发请求