首页 > 解决方案 > 在 Laravel 中将用户分配到任何商店时遇到问题

问题描述

我在将用户分配到任何商店时遇到问题。我创建Shop AShop B希望将用户分配给每个商店。当我将任何用户分配给Shop A. 但是,当我尝试将用户分配给 时Shop B,用户总是进入Shop Anot 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什么吗?

标签: laravelforeign-keys

解决方案


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);
}

对于UserModel,需要用ShopModel定义两种不同的关系

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);
}

推荐阅读