代码之家  ›  专栏  ›  技术社区  ›  slickness

一对多保存,无需创建

  •  1
  • slickness  · 技术社区  · 8 年前

    我只是有个小问题。我有一对多的关系。一个团队有许多用户。许多用户都有一个团队。 我有六个团队,用户必须从中选择一个。如何在不在数据库“team”中创建新条目的情况下将团队与用户连接起来?

    用户:

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id')->unique();
            $table->string('name');
            $table->integer('team_id')->unsigned()->nullable();
            $table->foreign('team_id')->references('id')->on('users')->onDelete('cascade');
            $table->string('username')->nullable()->unique();
            $table->string('email')->unique();
            $table->string('phone')->nullable()->unique();
            $table->string('avatar');
            $table->string('slug');
            $table->string('password');
            $table->date('birthday');
            $table->boolean('gender');
            $table->rememberToken();
            $table->timestamps();
        });
    }
    

    团队:

    public function up()
    {
        Schema::create('teams', function (Blueprint $table) {
            $table->increments('id')->unique();
            $table->string('name');
            $table->string('image');
            $table->string('image_thumbnail');
            $table->timestamps();
        });
    }
    

    控制器:

        public function storeTeam($request)
    {
        $user = Auth::user();
        $team = Team::findOrFail($request->team_id);
        $user->team()->associate($team);
    
        return redirect()->back()->with('success', lang::get('messages.team'));
    }
    

    查看:

    <div class="col-md-12">
    <form method="POST" action="{{ URL::route('store.team') }}">
          {{ csrf_field() }}
        <ul class="row clients-dotted list-inline text-center">
          @foreach ($teams as $team)
          <li class="col-md-4 col-sm-3 col-6">
            <div class="cc-selector">
              <input id="team{{$team->id}}" type="radio" name="team" value="{{$team->id}}" />
              <label style="background-image:url({{ $team->image_thumbnail }});" class="team-cc" for="team{{$team->id}}"></label>
              <p>{{$team->name}}</p>
            </div>
          </li>
          @endforeach
        </ul>
      <button type="submit" class="mb-50 float-right mr-20 btn btn-shadow-1 btn-primary">weiter</button>
    </form>
    

    路线:

    Route::post('/welcome/team', 'ProfilesController@storeTeam')->name('store.team');
    

    我对此有一点问题,并得到错误: 类型错误:

    Type error: Too few arguments to function App\Http\Controllers\ProfilesController::storeTeam(), 0 passed and exactly 1 expected
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Ohgodwhy    8 年前

    假设您正在存储 team_id user model ,您可以使用 associate 方法在子级上设置主键-- user 在这种情况下

    $user->team()->associate($team);
    

    您将通过所选 team 至控制器。不管怎样。您可以将其作为路由的一部分传递,也可以从表单传递团队ID并从 request .

    您希望将一个变量传递给名为 $request . 你想要的是注射 $请求 作为依赖项。您可以通过如下方式键入已解析的变量来完成此操作:

    public function storeTeam(Request $request)
    

    请注意,您需要 use Illuminate\Http\Request; 否则,您将在 Request