【发布时间】:2016-12-12 14:26:56
【问题描述】:
我正在尝试使用 Laravel 5.3 和 mysql 跟踪半私人网球课程记录。我正在尝试遵循 Laravel 5 多对多教程中设置的示例。我有一个 Players 模型,我试图通过 Player_Sharedlessonhours 数据透视表与 Sharedlessonhours 表同步。在代码中,我的 sharedlessonhours 表获得了插入的记录,但数据透视表没有。抱歉这么冗长,但我想弄清楚发生了什么。
首先是表结构。
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>
我想知道数组是否只是顺序不正确? 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 中的列后尝试添加不同的记录并再次收到错误。我将列切换回来并且错误继续存在,即使在重新启动修补程序之后也是如此。
【问题讨论】:
-
您能否尝试对播放器 ID 进行硬编码以进行调试(在附加调用中)。我无法从提供的代码中发现任何问题。
-
你没有提供 SharedLessonhours 类,特别是 player() 方法,可能问题出在那儿
-
你能把Player模型的内容和SharedLessonhours模型中的关系签名贴出来吗?
-
我很抱歉,但我正在努力更新我的问题,因为当我粘贴代码时编辑器不断抛出错误的格式错误。
-
试图更新帖子真是太疯狂了。我不得不使用空格键手动缩进,保存,然后重复。最后,我希望这个更新对每个人都有意义。
标签: mysql laravel laravel-5.3