Affichez une element d'une autre table grace à la clef etrangere Laravel 8
Bonjour je suis nouveau en Laravel. J'aimerais afficher le nom de chaque agent. J'ai prealablement créer une clef étrangère. je pensais pouvoir m'en servir pour recuperer les nom mais j'obitens cette erreur . jécris $rapport->agents_id->nom
Attempt to read property "nom" on int (View: C:\wamp64\www\SET\resources\views\rapport\index.blade.php)
Par contre quand je met $rapport->agents_id ca passe sans probleme. Je veux récuperer le nom de l'agent associé à agents_id.
<?php
namespace App\Http\Controllers;
use App\Http\Requests\RapportRequest;
use App\Models\Agent;
use App\Models\Rapport;
use Illuminate\Http\Request;
class RapportController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(agent $agents, rapport $rapports)
{
$agents = Agent::all();
$rapports = Rapport::all();
return view('rapport.index', ['agents' => $agents , 'rapports'=> $rapports
]);
}
<?php
namespace App\Models;
use App\Models\Agent as ModelsAgent;
use App\Models\Rapport;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Agent extends Model
{
use HasFactory;
protected $fillable = [
'matricule',
'agents_id',
'nom',
'prenom',
'email'
];
public function Agents()
{
return $this->hasMany(Rapport::class);
}
}
enfin le model rapport
<?php
namespace App\Models;
use App\Models\Agent;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Rapport extends Model
{
use HasFactory;
protected $fillable = [
'date_stats',
'nbre_tf_created',
'nbre_inscription',
'agents_id',
'nbre_tf_impacted'
];
public function Rapport()
{
return $this->belongsTo(Agent::class);
}
}
Bonjour, ton erreur vient du fait que tu essaie d'accéder à une propriété sur un entier. Autrement, je pense qu'il te manque une table entre tes rapports et tes agents, en supposant que la descrption suivante est correcte :
Un rapport peut contenir plusieurs agents, et un agent peut être référencé dans plusieurs rapports.
Si oui, ça signifie que tu dois créer une migration pour ça :
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRapportAgentTable extends Migration
{
public function up()
{
Schema::create('rapport_agent', function (Blueprint $table) {
$table->unsignedBigInteger("rapport_id");
$table->unsignedBigInteger("agent_id");
$table->foreign("rapport_id")->references("id")->on("rapports");
$table->foreign("agent_id")->references("id")->on("agents");
// Rajoute d'autres colonnes si nécessaire...
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('rapport_agent');
}
}
Ce qui te permettra de déclarer la relation sur ton modèle Rapport :
namespace App\Models;
use App\Models\Agent;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Rapport extends Model
{
use HasFactory;
protected $fillable = [
'date_stats',
'nbre_tf_created',
'nbre_inscription',
'agents_id',
'nbre_tf_impacted'
];
// Je pense que cette relation n'est pas pertinente
public function Rapport()
{
return $this->belongsTo(Agent::class);
}
public function agents()
{
return $this->belongsToMany(Agent::class, "rapport_agent");
}
}
Et à ce moment là tu pourras boucler sur les agents de ton rapport :
use App\Models\Rapport;
$rapport = Rapport::first();
foreach ($rapport->agents as $agent) {
dd($agent->nom);
}
Et pour ajouter un agent sur un rapport :
use App\Models\Rapport;
$rapport = Rapport::first();
$agent = Agent::first();
$rapport->agents()->attach($agent);
Tu as d'autres exemples sur la documentation sur comment ajouter/supprimer des modèles d'une relation belongsToMany ici : https://laravel.com/docs/6.x/eloquent-relationships#updating-belongs-to-relationships
Bonsoir à tous je suis debutante dans le monde Laravel 8. J'ai un problème semblable au sien. J'ai deux tables Auteur et Ouvrage(Un ouvrage ne peut être écrire que par un seul auteur et un auteur peut ecrire plusieurs ouvrages). Je veux pouvoir à partir d'un auteur_id(clé etrangère de Auteur dans la table Ouvrage) recupéré le nom+prénom de l'auteur pour les afficher en même temps sur une page comportant les details sur un ouvrage que j'arrive à afficher grâce une boucle foreach. J'ai regardé les indications ci-dessus mais je ne comprends pas. Pourriez-vous m'aider s'il-vous-plaît
Bonjour Aude, peux-tu s'il te plait ouvrir une nouvelle discussion, afin d'y intégrer le code que tu as pour le moment (les modèles et les migrations avec le controlleur qui y est associé dans le meilleur des cas) afin que chacun puisse avoir la chance de t'apporter de l'aide, merci !
Vous ne pouvez pas répondre à ce sujet.