J'essaie d'afficher, de mettre à jour et de supprimer l'enregistrement de deux tables différentes. Voici la fonction de show controller:
<h2>Update Staff</h2>
<form method="post" action="{{ route('staff.update', $staffinfo->user_id) }}" enctype="multipart/form-data">
@method('PATCH')
@csrf
<div class="form-row">
<div class="form-group col-md-3">
<label for="stfdesig">Designation</label>
<input type="text" name="stfdesig" value="{{ $staffinfo->designation }}" class="form-control" id="stfid"
</div>
<div class="form-group col-md-3">
<label for="stfid">ID</label>
<input type="text" name="stfid" value="{{ $staffinfo->user_id }}" class="form-control" id="stfid">
</div>
<div class="form-group col-md-6">
<label for="stfname">Name</label>
<input type="text" name="stfname" value="{{ $staffinfo->name }}" class="form-control" id="stfname">
</div>
<div class="form-group col-md-6">
<label for="stfmobile">Mobile</label>
<input type="text" name="stfmobile" value="{{ $userinfo->mobile }}" class="form-control" id="stfmobile">
</div>
</div>
<button type="submit" class="btn btn-primary">Update</button>
</form>
Voici le code view.blade.php:
public function edit($user_id)
{
//
$staffinfo = Staff::find($user_id); // Loading all data from
$userinfo = User::find($user_id);
return view('staff.edit')
->with('staffinfo', $staffinfo)
->with('userinfo', $userinfo);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $user_id)
{
//
$staffinfo = Staff::find($user_id);
$staffinfo->name = $request->input('stfname');
$staffinfo->user_id = $request->input('stfid');
$staffinfo->designaton = $request->input('stfdesig');
$staffinfo->dob = $request->input('staffdob');
$staffinfo->save();
$userinfo = User::find($user_id);
$userinfo->user_id = $request->input('stfid');
$userinfo->user_type = $request->input('stfdesig');
$userinfo->mobile = $request->input('staffmobile');
$userinfo->email = $request->input('staffmail');
$userinfo->password = $request->input('staffpw');
$userinfo->save();
}
Modifier et mettre à jour la fonction dans le contrôleur: p>
<table class="table table-hover table-dark">
<tbody>
<tr>
<th scope="row">Name</th>
<td>{{ $staffinfo->name }}</td>
</tr>
<tr>
<th scope="row">Mobile</th>
<td>{{ $userinfo->mobile }}</td>
</tr>
<tr>
<th scope="row">Designation</th>
<td>{{ $staffinfo->designatin }}</td>
</tr>
</tbody>
</table>
edit.blade.php code une partie:
public function show($user_id)
{
//
$staffinfo = Staff::find($user_id); // Loading all data from
$userinfo = User::find($user_id);
return view('staff.view')
->with('staffinfo', $staffinfo)
->with('userinfo', $userinfo);
}
Erreur de page d'affichage:
Essayer d'obtenir la propriété 'nom' d'un non-objet (vue: F: \ xampp \ htdocs \ gchsc \ resources \ views \ staff \ view.blade.php)
Erreur de modification de la page:
Essayer d'obtenir la propriété 'user_id' d'un non-objet (vue: F: \ xampp \ htdocs \ gchsc \ resources \ views \ staff \ edit.blade.php)
4 Réponses :
Vous pouvez transmettre des valeurs en utilisant compact ()
public function show($user_id){
$staffinfo = Staff::find($user_id);
$userinfo = User::find($user_id);
return view('staff.view', compact('staffinfo','userinfo'));
}
Vous pouvez utiliser toutes sortes de méthodes pour transmettre les données à la vue, mais ce n'est pas la solution au problème en question.
Je ne suis pas sûr que -> with () soit la méthode dont vous avez besoin pour transmettre des données à une vue.
Comme Shanu l'a dit, vous pouvez utiliser compact.
Ou vous pouvez simplement passer les données à la vue dans un tableau associatif comme deuxième paramètre ...
return view('staff.edit', [
'staffinfo' => $staffinfo,
'userinfo' => $userinfo
]);
avec est une méthode valide de transmission de données à la vue. Documentation
Bizarre. J'ai vu cette question posée à quelques reprises où les gens utilisent avec () et cela ne fonctionne pas. Et bien! À votre santé.
<table class="table table-hover table-dark">
<tbody>
<tr>
<th scope="row">Name</th>
<td>{{ $staffinfo->name }}</td>
</tr>
<tr>
<th scope="row">Mobile</th>
<td>{{ $userinfo->mobile }}</td>
</tr>
<tr>
<th scope="row">Designation</th>
<td>{{ $staffinfo->designatin }}</td>
</tr>
</tbody>
</table>
Je pense que j'ai le problème, mais je ne peux pas le résoudre. Il y a champ user_id dans la table des utilisateurs et dans la table des employés. Si si envoyer l'identifiant de voir le lien de index.blade.php alors c'est du travail.
<a href="/staff/{{$info->user_id}}">View</a>Si est send user_id, cela ne fonctionne pas. Affichage de l'erreur ci-dessus.
<a href="/staff/{{$info->id}}">View</a>Comment puis-je envoyer le formulaire user_id à partir du lien d'affichage?
essayez de référencer toutes vos variables comme ceci: $ staffinfo ['name'].
@BradGoldsmith Non, vous ne devriez pas. Laravel vous propose des objets avec lesquels travailler, pas des tableaux.
@Riyad êtes-vous sûr que le
staffinfo(qui est celui qui cause les erreurs) est chargé dans les deux situations? Peut-être que le résultat est NULL et provoquerait donc des erreurs.@DouwedeHaan oui, c'est chargé. Je veux savoir est-ce la bonne façon d'afficher les enregistrements de plusieurs tables et de modifier l'enregistrement de plusieurs tables en utilisant un seul formulaire? Je n'ai créé aucune relation entre les tables. J'ai utilisé Elequent.
@Riyad les champs auxquels vous essayez d'accéder existent-ils dans le tableau?
staffinfocontient-il les champs name et user_id?@DouwedeHaan oui il y a un champ user_id dans la table staffinfo également dans la table user. Veuillez vérifier ma réponse ci-dessous.