Laravel France

Jointure / Clef Composites, besoin d'aide, étudiant

Avatar de Sensta_Xildrite
Sensta_Xildrite

Bonjour, je suis en DUT Informatique 2ème année est j'essaie pour notre projet de faire une selection comme sur le schema si dessous :

J'essaye de recuperer le libelle de t_r_badge_bad en fonction de l'id Abo_id de la table t_e_abonne_abo malheureusement il faut que je passe par t_j_badgeabonne_baa qui possède 2 clefs primaires ... J'ai essayé de une composite mais ça ne fonctionne par sur Laravel ... La base de données est hébergé sur PostregreSQL

Voici :

Mon Controller :

public function edit(){
      	$abo = Connexion::find(1);
        $badges = $abo->affichageBadge()->OrderBy('bad_libelle','desc');
        return view ("edit",['leAbonne'=>$abo,'badge'=>$badges,'listPays'=>Country::all()]);
    }

Mes Models :

  • t_r_badge_bad
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Badges extends Model
{
    use HasFactory;

    protected $table = "t_r_badge_bad";
    protected $primaryKey = "bad_id";
    public $timestamps = false;
}
?>
  • t_j_badgeabonne_baa
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;


class BadgesId extends Model
{
    use HasFactory;

    protected $table = "t_j_badgeabonne_baa";
    protected $primaryKey = 'abo_id';
    public $timestamps = false;
}
?>
  • t_e_abonne_abo ( J'ai essayé de faire comme ça mais sans succes ... ) et je ne comprends pas vraiment comment fonctionne les jointures en Laravel du coup j'ai essaye avec un hasManyThrough... :/
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Connexion extends Model
{
    use HasFactory;
    protected $table = "t_e_abonne_abo";
    protected $primaryKey = "abo_id";
    public $timestamps = false;
    

   	public function BadgesId()
    {
        return $this->hasMany('App\Models\BadgesId');
    }
    public function affichageBadge()
    {
        return $this->hasManyThrough('App\Models\Badges', 'App\Models\BadgesId');
    }
    /*
        public function affichageBadge(){
    	return $this->hasMany("\App\Models\Badges", "bad_id", "bad_id");
    }
    */
}

Et voici la partie de la blade :

             <div>

	    			<p>Badges : @foreach ($badge as $key)</p>
	    			<?php 
	    			echo"<p>$key->bad_libelle</p>";
	    			?>
	    			@endforeach
             </div>

Aucune erreur ne s'affiche, j'ai juste ça : Merci à vous pour votre aide et bonne journée/soirée :) Baptiste

Posté il y a 1 mois
Avatar de bestmomo
bestmomo

Salut,

Du point de vue des relations tu peux traiter ça avec une relation Many To Many entre les tables bades et abonnes avec comme pivot la table BadgeAbonne.

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.