Je ne reçois pas tous les enregistrements de la table pivot
Salut tout le monde,
J'ai trois tables :
1- events 2- years 3- event_year (table pivot)
Une année peut avoir plusieurs évènements et un évènement peut se retrouver dans plusieurs années.
Le problème est que je ne reçois qu'un évènement par année.
Par exemple, prenons l'exemple de l'event 65 qui devrait se trouver dans 2 années :
Le résultat obtenu par Telescope montre qu'une seule année pour l'évènement 65 alors que je devrais en avoir deux :
{
"view": "/Applications/MAMP/htdocs/overlap_150721/resources/views/evenement/index.blade.php",
"data": {
"evenements": {
"class": "Illuminate\Database\Eloquent\Collection",
"properties": [
{
"id": 1,
"name": "BA1",
"created_at": "2021-08-12T12:12:04.000000Z",
"updated_at": null,
"evenements": [
{
"id": 65,
"name": "Accueil",
"mnemonique": "Accueil",
"color": "white",
"created_at": "2021-08-12T12:26:57.000000Z",
"updated_at": "2021-08-12T12:26:57.000000Z",
**"pivot": {
"year_id": 1,
"evenement_id": 65
**}
J'ai des migrations pour les 3 tables :
public function up()
{
Schema::create('**evenements**', function (Blueprint $table) {
$table->id();
$table->string('name');
//$table->integer('year_id'); // dteu: table pivot 09072021 | evenement_year ;
$table->string('mnemonique'); // nullable? (dteu)
$table->string('color')->nullable();
$table->timestamps();
});
}
public function up()
{
Schema::create('**years**', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
public function up()
{
Schema::create('**evenement_year**', function (Blueprint $table) {
$table->id();
$table->foreignId('evenement_id')->references('id')->on('evenements')->onDelete('cascade');
$table->foreignId('year_id')->references('id')->on('years')->onDelete('cascade');
$table->timestamps();
});
}
Voici les deux modèles :
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class **Evenement** extends Model
{
protected $fillable = ['name','mnemonique','color'];
public function years()
{
return $this->belongsToMany(Year::class);
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class **Year** extends Model
{
protected $fillable = ['name'];
public function evenements()
{
return $this->belongsToMany(Evenement::class)->withPivot(["evenement_id", "year_id"]);;
}
}
Voici le contrôleur :
$evenements = Year::with(['evenements'=>function($query)
{
return $query->orderBy('mnemonique');
}])->orderBy('id')->get();
Bonjour!
J'ai vérifié votre code dans Laravel 8. Il fonctionne!
Quelle version de Laravel utilisez-vous?
Bonjour,
Merci pour votre réponse.
Je suis sous Laravel 7.
J'ai trouvé la solution depuis, il fallait faire le contraire, c'est -à-dire utiliser le modèle Year with le modèle events (donc le contraire de ce que je faisais...)
Encore merci pour la réponse.
Vous ne pouvez pas répondre à ce sujet.