Laravel France

Je ne reçois pas tous les enregistrements de la table pivot

Avatar de DavidDubois
DavidDubois

Salut tout le monde,

J'ai trois tables :

1- events 2- years 3- event_year (table pivot)

!(https://www.dropbox.com/s/z1jp1qguj4ivijb/Capture%20d%E2%80%99%C3%A9cran%202021-08-12%20%C3%A0%2015.34.54.png?dl=0)

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 :

https://www.dropbox.com/s/wguunlvxeg7v7bn/Capture%20d%E2%80%99%C3%A9cran%202021-08-12%20%C3%A0%2015.51.47.png?dl=0

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();
Posté il y a 1 mois
Avatar de Ilya
Ilya

Bonjour!

J'ai vérifié votre code dans Laravel 8. Il fonctionne!

Quelle version de Laravel utilisez-vous?

Posté il y a 1 mois
Avatar de DavidDubois
DavidDubois

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.