Je tirais les maladies de DB et de les présenter en front-end avec des cases à cocher:cases Laravel avec many-to-many
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
@foreach($diseases as $disease)
<div class="col-md-6">
<div class="form-group">
<label>{{ Form::checkbox('diseases','0','',
['class' => 'grey','data-id'=> $disease->id]) }}
{{$disease->title}}
</label>
<div class="clearfix"></div>
</div>
</div>
@endforeach
</div>
Une fois que je soumets la forme, je reçois le résultat de la $request->diseases
comme celui-ci :
1:"1"
2:"1"
3:"0"
4:"1"
5:"0"
6:"0"
...
où le premier nombre représente disease_id
, et l'autre présente si la case est cochée ou non. Les relations avec le tableau croisé dynamique sont effectués dans les modèles correctement, et ce que j'essaie de faire dans le contrôleur est:
if ($request->has('diseases')) {
$patient->diseases()->sync($request->diseases);
}
mais échoue avec l'erreur:
Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key
constraint fails (`db_name`.`disease_patient`, CONSTRAINT `disease_patient_patient_id_foreign`
FOREIGN KEY (`patient_id`) REFERENCES `patients` (`id`) ON DELETE CASCADE) (SQL: insert into
`disease_patient` (`disease_id`, `patient_id`)
values (17, {"1":"0","2":"0","3":"1","4":"1","5":"1","6":"1","7":"1","8":"1","9":"0","10":"1","11":"0","12":"1","13":"0","14":"0","15":"0","16":"0","17":"0","18":"0","19":"0","20":"0","21":"0","22":"0","23":"0"}))
Relation à l'intérieur Patient
modèle:
protected $guarded = ['id'];
public function diseases()
{
return $this->belongsToMany('App\Disease', 'disease_patient', 'disease_id', 'patient_id');
}
EDIT:
Quand je fais:
$diseases = array_keys(array_filter(json_decode($request->diseases, true)));
return $diseases;
Je reçois la liste des années ID comme ceci:
0:1
1:2
2:8
3:14
4:15
5:21
Et erreur:
(SQL: insert into `disease_patient` (`disease_id`, `patient_id`) values (33, 1))
Avec disease_id
incrémenter sur chaque demande
Hmm étrange, je l'ai fait un 'gettype()' sur la demande, et je me suis chaîne? Probablement une chaîne JSON alors. J'essaye avec 'json_decode()' ... – Norgul
Que faire si vous 'dd ($ request);'? –
C'est une liste d'huuuge. Mais si je fais cette ligne '$ diseases = array_keys (array_filter (json_decode ($ request-> diseases, true)))' 'Je reçois de nouveau la violation d'intégrité mais maintenant il est alimenté avec 2 valeurs (27, 1) pour' disease_id 'et' patient_id'. Le second est correct, le premier est incrémenté à chaque requête – Norgul