Deux models dans un Controller pour la méthode Edit & Update

Par fred1340, il y a 7 ans


Bonjour,

J'ai en fait deux tables, la première table est appelée series avec 3 champs: id, name, fk_mark.
Ensuite, j'ai une seconde entité qui est nommée marks avec 2 champs id, name_mark.

Donc en gros, j'aimerais créer un système CRUD à travers mon SerieController, je suis bloqué à l'étape UPDATE.

Dans ma fonction edit , comment dois-je ajouter le model mark ? Car j'ai une foreign key liée.

public function edit($id) { $series = Serie::find($id); return view('admin.series.edit', compact('series')); }

Pareil pour la fonction update , j'ai besoin du model mark normalement étant donné que j'ai une clef étrangère ?

public function update(Request $request, $id) { $request->validate([ 'name' => 'required' /*'fk_mark' => 'required'*/ ]); $series = Serie::find($id); $series->name = $request->get('name'); /*$series->fk_mark = $request->get('fk_mark');*/ $series->save(); return redirect()->route('series.index') ->with('success', 'updated successfully'); }

Ce que je voudrai réaliser, c'est un système CRUD, lorsque l'utilisateur cliquera sur la rubrique serie, ensuite sur editer il y' aura 2 champs à modifier:
la première sera le field name (de la table serie donc).
le second champ sera la fk_mark (du name_mark de la table marks) en liste déroulante et l'utilisateur n'aura plus qu'à changer l'item. Mais avant de passer à la vue je dois savoir si je dois inclure mon model Mark dans le SerieController.

Je ne sais pas si c'est clair ?

1 réponse

SNOWWTARIE, il y a 7 ans

Si tu as bien configuré tes belongsTo et hasMany (cf. la doc), ta Mark est accessible depuis ta Serie comme ça $maSerie->mark

Typiquement, ça devrait donner

class Serie extends Model { public function mark() { return $this->belongsTo('App\Mark', 'fk_mark'); } }

Si on considère qu'une même Mark peut être attribuée à n Serie.

EDIT : après relecture, je me rends compte que je réponds à côté ...
Si tu veux pouvoir afficher tes Mark dans ta vue, tu peux importer ton model use App\Mark;
Comme ça tu peux faire $marks = Mark::all();.
Tu peux aussi directement faire $marks = App\Mark::all();
Et dans ce cas sauvegarder ta serie en récupérant l'id de ta Mark depuis ta requête

$mark = Mark::find($request->get('mark_id')); $serie->mark()->associate($mark); $serie->save();