laravel整合性制約違反について質問されている問題はたくさんありますが、Many to Manyそれは私の場合です。基本的に私はテーブルHobi(趣味)とテーブルSiswa(学生)があり、学生は多くの趣味を持つことができ、多くの学生が趣味を好むことができるので、関係は多種多様です。だからここのコードは次のとおりです。Laravel:整合性制約違反:1452子行を追加または更新できません:外部キー制約が失敗しました - 多対多関係
これは私のモデルHobiです:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Hobi extends Model
{
protected $table = 'hobi';
protected $fillable = [
'nama_hobi',
];
public function siswa(){
return $this->belongsToMany('App\Siswa', 'hobi_siswa', 'id_hobi', 'id_siswa');
}
}
モデルSiswa:Hobiを含まフォームビューコードの
namespace App;
use Illuminate\Database\Eloquent\Model;
class Siswa extends Model
{
protected $table = 'siswa';
protected $fillable = [
'nisn',
'nama_siswa',
'tgl_lahir',
'jns_klmin',
'id_kelas',
'id_hobi',
];
public function hobi(){
return $this->belongsToMany('App\Hobi', 'hobi_siswa', 'id_siswa', 'id_hobi')->withTimeStamps();
}
}
作品:
@if($errors->any())
<div class="form-group {{$errors->has('hobi') ? 'has-error' : 'has-success'}}">
@else
<div class="form-group">
@endif
{!! Form::label('hobi', 'Hobi:', ['class'=>'control-label']) !!}
@if(count($hobi_list) > 0)
@foreach($hobi_list as $key => $value)
<div class="checkbox">
<label>{!! Form::checkbox('hobi[]', $value, null) !!}{{$value}}</label>
</div>
@endforeach
@else
<p>Tidak ada pilihan hobi.</p>
@endif
</div>
最後にコントローラ:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Siswa;
use App\Telepon;
use App\Kelas;
use App\Hobi;
use Validator;
class SiswaCont extends Controller
{
public function siswa(){
$siswa_list = Siswa::orderBy('nama_siswa', 'asc')->paginate(10);
$jmlh_siswa = Siswa::count();
return view('siswa.ssw', compact('siswa_list', 'jmlh_siswa'));
}
public function create(){
$kelas_list = Kelas::lists('nama_kelas', 'id');
$hobi_list = Hobi::lists('nama_hobi', 'id');
return view('siswa.create', compact('kelas_list', 'hobi_list'));
}
public function store(Request $request){
$input = $request->all();
$validator = Validator::make($input, [
'nisn'=>'required|string|size:4|unique:siswa,nisn',
'nama_siswa'=>'required|string|max:30',
'tgl_lahir'=>'required|date',
'jns_klmin'=>'required|in:L,P',
no_telepon'=>'sometimes|numeric|digits_between:10,15|unique:telepon,no_telepon',
'id_kelas'=>'required',
]);
if ($validator->fails()) {
return redirect('siswa/create')->withInput()- >withErrors($validator);
}
$siswa = Siswa::create($input);
$siswa->hobi()->attach($request->input('hobi'));
return redirect('siswa');
}
}
私はピボットテーブルhobi_siswaを使用してid_siswaとid_hobiを含むブリッジを作成しています。フォームビューのHobi自体はチェックボックスがモデル化されています。問題は制約され、別の列(nisn、nama_siswa、teleponなど)のデータSiswaは保存されますが、Hobiは保存されません。どんな助けもありがたい。
これは簡単ですが、それは、それが明確にリンクがなくても何をすべきかを述べているだけで、リンクではありません。 –