0
我知道有一堆关于laravel完整性约束违规的问题,但它们中没有一个是多对多关系,这是我的情况。基本上我有一张桌子霍比(爱好)和桌子西斯瓦(学生),而且这种关系是多对多的,因为一个学生可以有很多兴趣爱好,并且一个兴趣爱好可以被很多学生所青睐。因此,这里是代码: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:
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();
}
}
含有HOBI一块表单视图代码:
@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没有。任何帮助赞赏。
这是短暂的,但它不是链接而已,它明确规定了什么,甚至没有做链接。 –