如何插入枢轴 table

How to insert to pivot table

我正在尝试使用 Laravel 5.3 和 mysql 跟踪半私人网球课记录。我正在尝试按照 Laravel 5 多对多教程中设置的示例进行操作。我有一个玩家模型,我正尝试通过 Player_Sharedlessonhours 枢轴 table 与 Sharedlessonhours table 同步。在代码中,我的 sharedlessonhours table 获得了插入的记录,但数据透视表 table 没有。抱歉这么冗长,但我想弄清楚发生了什么。

首先是 table 结构。

     public function up()
{
    Schema::create('sharedlessonhours', function (Blueprint $table) {
        $table->increments('id');
        $table->date('signup_date');
        $table->integer('packages_id')->unsigned();
        $table->timestamps();


    });

     Schema::table('sharedlessonhours', function (Blueprint $table) {
         $table->foreign('packages_id')->references('id')->on('packages');
     });


    Schema::create('player_sharedlessonhour', function (Blueprint $table) 
    {
        $table->integer('sharedlessonhours_id')->unsigned();
        $table->integer('players_id')->unsigned();
        $table->timestamps();


    });

    Schema::table('player_sharedlessonhour', function (Blueprint $table) {
        $table->foreign('sharedlessonhours_id')->references('id')->on('sharedlessonhours')->onDelete('cascade');
          $table->foreign('players_id')->references('id')->on('players')->onDelete('cascade');

     });
}

创建和存储方法:

    public function createSharedLessonhours()
{
    $players = Players::orderBy('lname')->pluck('fname', 'id');
    $packages = Packages::orderBy('name')->pluck('name','id');
    return view('admin.lessonhours.sharedlessonhours', compact('players', 'packages'));
}

public function storeSharedLessonhours(Request $request)
{
   $sharedlessonhours = SharedLessonhours::create($request->all());

   $sharedlessonhours->players()->attach($request->input('players'));
}

表格:

        <div class="col-md-4 col-sm-5">
    {!! Form::open(['url' => 'sharedlessonhours']) !!}
    <div class="form-group">
        {!! Form::label('players', 'Player(s):') !!}
        {!! Form::select('players[]', $players, null, ['class' => 'form-control', 'multiple']) !!}
    </div>
    <div class="form-group">
        {!! Form::label('signup_date', 'Signup Date:') !!}
        {!! Form::text('signup_date', null, ['class' => 'form-control']) !!}
    </div>
    <div class="form-group">
        {!! Form::label('packages_id', 'Lesson Package:') !!}
        {!! Form::select('packages_id', $packages, null, ['class' => 'form-control', 'placeholder' => 'Choose Package']) !!}
    </div>

    <div class="form-group">
        {!! Form::submit('Signup', ['class' => 'btn btn-default form-control']) !!}
    </div>

{!! Form::close() !!}
</div>

玩家 ID select 框的屏幕截图:

以及错误截图:

我想知道数组的顺序是否不正确? dd($request) 显示正在从表单中收集所有内容,但查看错误页面似乎是在尝试将数据插入错误的字段。如果对 mysql 很重要,则具有 (3,4) 的行将不是正确的顺序。我尝试翻转 mysql 中的列,但没有帮助。 我现在很迷茫。

更新: 首先,我将分享请求的代码,然后分享我已采取的进一步调试步骤。

玩家模型代码:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Collective\Html\Eloquent\FormAccessible;
use Carbon\Carbon;


class Players extends Model
{
    public $table = "players";

    protected $fillable = array('fname', 'lname', 'gender', 'birthdate');


    public function users()
    {
        return $this->belongsTo('App\User', 'users_id');
    }

    public function lessonHours()
    {
        return $this->hasMany('App\Lessonhours', 'players_id');
    }

    public function sharedlessonhours()
    {
             return $this->belongsToMany('App\SharedLessonhours',            "player_sharedlessonhour","players_id", "sharedlessonhours_id" );
    }

    public function getFullName($id)
    {
        return ucfirst($this->fname ) . ' ' . ucfirst($this->lname);
    }

    protected $dates = ['birthdate'];

    public function setBirthdateAttribute($value)
    {
        $this->attributes['birthdate'] = Carbon::createFromFormat('m/d/Y',     $value);
    }
}

共享课时:

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Collective\Html\Eloquent\FormAccessible;
use Carbon\Carbon;

class SharedLessonhours extends Model
{
    use FormAccessible;

    protected $fillable = array('signup_date', 'packages_id');

    public $table = "sharedlessonhours";

    public function players()
    {
        return $this->belongsToMany('App\Players',     "player_sharedlessonhour", "players_id", "sharedlessonhours_id");
    }

    public function sharedhoursused()
    {
        return $this->hasMany('App\SharedHoursused', 'id');
    }

    public function packages()
    {
        return $this->belongsTo('App\Packages');
    }

    public function setSignUpDateAttribute($value)
    {
        $this->attributes['signup_date'] = Carbon::createFromFormat('m/d/Y',     $value);
    }
}

我试图在更改 mysql 中的列后添加不同的记录,但再次出现错误。我将列切换回去,错误仍然存​​在,即使在重新启动 tinker 之后也是如此。

In addition to customizing the name of the joining table, you may also customize the column names of the keys on the table by passing additional arguments to the belongsToMany method. The third argument is the foreign key name of the model on which you are defining the relationship, while the fourth argument is the foreign key name of the model that you are joining to

来自 laravel 多对多关系的文档。

因此,SharedLessonhour 模型中 players 关系的定义应为

public function players()
{
    return $this->belongsToMany('App\Players',  "player_sharedlessonhour", "sharedlessonhours_id",  "players_id");
}  

尝试更改定义并查看。我还没有测试过,但这似乎是违反约束的原因。