Besoin d'aide ?

Besoin d'aide Relationship avec GroupBy

  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    65

    Bonjour à tous ,

    je viens vers vous car j'ai besoin d'aide pour mon projet ...

    J'ai besoin de faire en une requête une liaison et groupBy par "date_office" entre ma table Livres, tags et admin.

    Voici ma table livres :

    class Livres extends Model
    {

    /
    Protège une table
    @var string
    */
    protected $table = 'livres';

    /*
    Permet de voir quel champs sont modifiable
    @var array
    /
    protected $fillable = [
    'titre','sous_titre','description','photo','apercu','video','disponibilite','prix_ttc','prix_promo','langue',
    'isbn','ean_13','date_parution','date_office','format','prix_lancement','faconnage','nbre_page','typesID','collection','clil'];

    /

    Annule la fonction create et update automatique
    @var bool
    /
    public $timestamps = false;
    protected $casts = [
    'clil' => 'array',
    ];
    /

    Liaison livres et Tags
    /
    public function tags(){

    return $this->belongsToMany(tags::class,'livres_has_tags');

    }

    ma table tags

    class tags extends Model
    {
    public function getid()
    {

    return $this->id;
    }

    /
    Protège une table
    @var string
    */
    protected $table = 'tags';

    /*
    Permet de voir quel champs sont modifiable
    @var array
    /
    protected $fillable = [
    'titre','photo','photoMin','principal'];

    /

    Annule la fonction create et update automatique
    @var bool
    /
    public $timestamps = false;
    /

    Liaison livres et Tags
    /
    public function livres(){

    return $this->belongsToMany(Livres::class,'livres_has_tags');

    }

    et ma table admin :

    class Admin extends Authenticatable
    {
    use Notifiable;

    public function role(){
    return $this->belongsToMany(role::class,'role_admins');
    }

    /
    The attributes that are mass assignable.

    @var array
    /
    protected $fillable = [
    'name', 'email', 'password',
    ];

    /

    The attributes that should be hidden for arrays.

    @var array
    /
    protected $hidden = [
    'password', 'remember_token',
    ];

    /*
    Send the password reset notification.

    @param string $token
    @return void
    /
    public function sendPasswordResetNotification($token)
    {
    $this->notify(new AdminResetPasswordNotification($token));
    }

    /*
    Get the entity's notifications.
    /
    public function notifications()
    {
    return $this->morphMany(DatabaseNotification::class, 'notifiable')
    ->orderBy('created_at', 'desc');
    }

    /

    Liaison editeur Livres
    /
    public function livre(){

    return $this->hasMany(Livres::class,'adminID');
    }

    }

    Ma requete ou je regroupe les livres par date d'office :
    Dans le controlleur:

    public function commande(){

    if (Auth::check()) {

    $tagFiltre= tags::all();
    $tags=tags::all();
    $livres= Livres::orderBy('date_office','desc')->get()->groupBy('date_office');

    return view('commande1', compact('tags','tagFiltre','livres'));
    }
    else{

    return view('auth.login');
    }
    }

    Et dans la vue blade :

    <table class="table-bordered">
    <thead>
    <tr>
    <th>Nom de la catégorie</th>
    <th>Liste des Livres</th>
    <th>Je précise ma commande</th>

    </tr>
    </thead>
    <tbody id="testage" class="boxes">

    @foreach($livres as $year => $livre)
    <tr>
    <td colspan="3" class="text-center" bgcolor="#0000FF" style="color:white">{{$year}}</td>

    </tr>

    @foreach($livre as $l)
    <tr>
    <!-- Ici à la place d'affiché toutes les nom des catégories lié au livre j'aimerais par exemple mettre tags Amour : et les titres du livres etc )-->
    <td>@foreach($l->tags as $tag){{$tag->titre_fr}} @endforeach</td>
    <td>{{$l->titre}}</td>
    </tr>
    @endforeach

    @endforeach

    </tbody>
    </table>
    {{--$tags->links()--}}
    @endsection

    Quelqu'un a une piste ? Merci d'avance

  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    65

    Update :

    En bossant dessus je suis arrive au résultat des catégories et livres groupé par ce moyen :

    controller :

    `
    public function commande(){

    if (Auth::check()) {

    $tagFiltre= tags::all();
    $tags=tags::all();
    $livres= Livres::join('livres_has_tags', 'livres.id', '=', 'livres_has_tags.livres_id')
    ->join('tags','livres_has_tags.tagsid','=','tags.id')
    ->select('livres.*', 'tags.titre
    '.App::getLocale().' as tagsname')
    ->orderBy('date_office','desc')
    ->get()->groupBy('date_office');
    // ->groupBy('tagsname');

    foreach ($livres as $l){
    $livresTag[]= $l->groupBy('tagsname');
    }

    return view('commande2', compact('tags','tagFiltre','livres','livresTag'));
    }
    else{

    return view('auth.login');
    }
    }

    `

    blade:

    <table class="table-bordered">
    <thead>
    <tr>
    <th>Nom de la catégorie</th>

    <th>Liste des Livres</th>
    <th>Je précise ma commande</th>

    </tr>
    </thead>
    <tbody id="testage" class="boxes">

    @foreach($livres as $year => $livre)
    <tr>
    <td colspan="3" class="text-center" bgcolor="#0000FF" style="color:white">{{$year}}</td>

    </tr>

    @foreach($livresTag as $l)

    @foreach($l as $tagsname => $li)
    @php
    $a =0;
    @endphp
    @if($year == $li[$a]->date_office)
    <tr>

    <td>{{($tagsname)}}</td>
    <td>@foreach($li as $finale)
    <ul>
    @if($year == $finale->date_office)
    <li> {{$finale->titre}}</li>

    @endif
    </ul>
    @endforeach</td>
    <td></td>

    </tr>
    @endif
    @php
    $a ++;
    @endphp
    @endforeach
    @endforeach

    @endforeach

    </tbody>
    </table>

    Si quelqu'un à une idée pour amélioré ?

Vous ne pouvez pas répondre à ce sujet.