Bonjour,

Je suis actuellement en train de développer mon portfolio sous Laravel et je souhaiterai afficher la liste de mes compétences classées dans des catégories.

Mon controlleur

class SkillsController extends Controller
{
    public function index()
    {
        $skills = SkillCategory::with('skills')->groupby('skill_category_id')->get();

        return view('skills.index', compact('skills'));
    }
}

Ma vue

@extends('layout.default')

@section('content')
    <section id="skills" class="inner-content">
        <div class="padding-50 wow fadeInLeft" data-wow-delay="0.6s" data-wow-offset="5">
            <h3 class="font-accident-two-normal uppercase">{{ trans('homepage.My Professional skills') }}</h3>
            <div class="dividewhite1"></div>
            <div class="row">
                <div class="col-sm-5 nopadding">
                    @foreach($skills as $skill)
                        <h4>{{ $skill->name }}</h4>
                        <h4 class="font-accident-one-normal uppercase">{{ $skill->name }}</h4>
                        <div class="progress">
                            <div class="progress-bar" role="progressbar" aria-valuenow="{{ $skill->progress }}"
                                 data-percent="{{ $skill->progress }}" aria-valuemin="0" aria-valuemax="100"
                                 style="width: {{ $skill->progress }}%;">
                                <span class="font-accident-one-normal">{{ $skill->progress }}%</span>
                            </div>
                        </div>
                    @endforeach
                </div>
            </div>
        </div>
    </section>
@stop

Les Modèles

class Skill extends Model
{
    public function category()
    {
        return $this->belongsTo('App\SkillCategory')->orderBy('progress', 'DESC');
    }
}
class SkillCategory extends Model
{
    public function skills()
    {
        return $this->hasMany('App\Skill');
    }
}

Je souhaiterai donc afficher la liste de mes compétences toutes regroupées dans leurs catégories respectives

Catégorie A
-> Ma compétence
-> Ma compétence
-> Ma compétence
-> Ma compétence
Catégorie B
-> Ma compétence
-> Ma compétence
-> Ma compétence
-> ...

J'ai effectué plusieurs tests et recherches avant de venir ici
J'ai fait un print_r sur $skill ce qui me retourne :

  App\SkillCategory Object
(
    [connection:protected] => 
    [table:protected] => 
    [primaryKey:protected] => id
    [keyType:protected] => int
    [perPage:protected] => 15
    [incrementing] => 1
    [timestamps] => 1
    [attributes:protected] => Array
        (
            [id] => 1
            [name] => Langages de programmation
            [position] => 10
            [created_at] => 2016-07-30 21:43:11
            [updated_at] => 2016-07-30 21:43:11
            [skill_category_id] => 
        )

    [original:protected] => Array
        (
            [id] => 1
            [name] => Langages de programmation
            [position] => 10
            [created_at] => 2016-07-30 21:43:11
            [updated_at] => 2016-07-30 21:43:11
            [skill_category_id] => 
        )

    [relations:protected] => Array
        (
            [skills] => Illuminate\Database\Eloquent\Collection Object
                (
                    [items:protected] => Array
                        (
                            [0] => App\Skill Object
                                (
                                    [connection:protected] => 
                                    [table:protected] => 
                                    [primaryKey:protected] => id
                                    [keyType:protected] => int
                                    [perPage:protected] => 15
                                    [incrementing] => 1
                                    [timestamps] => 1
                                    [attributes:protected] => Array
                                        (
                                            [id] => 10
                                            [skill_category_id] => 1
                                            [name] => PHP
                                            [progress] => 80
                                            [created_at] => 2016-07-30 21:49:13
                                            [updated_at] => 2016-07-30 21:49:13
                                        )

                                    [original:protected] => Array
                                        (
                                            [id] => 10
                                            [skill_category_id] => 1
                                            [name] => PHP
                                            [progress] => 80
                                            [created_at] => 2016-07-30 21:49:13
                                            [updated_at] => 2016-07-30 21:49:13
                                        )

...

                            [1] => App\Skill Object
                                (
                                    [connection:protected] => 
                                    [table:protected] => 
                                    [primaryKey:protected] => id
                                    [keyType:protected] => int
                                    [perPage:protected] => 15
                                    [incrementing] => 1
                                    [timestamps] => 1
                                    [attributes:protected] => Array
                                        (
                                            [id] => 13
                                            [skill_category_id] => 1
                                            [name] => C
                                            [progress] => 27
                                            [created_at] => 2016-07-30 21:49:13
                                            [updated_at] => 2016-07-30 21:49:13
                                        )

                                    [original:protected] => Array
                                        (
                                            [id] => 13
                                            [skill_category_id] => 1
                                            [name] => C
                                            [progress] => 27
                                            [created_at] => 2016-07-30 21:49:13
                                            [updated_at] => 2016-07-30 21:49:13
                                        )

                    ...
                            [2] => App\Skill Object
                                (
                                    [connection:protected] => 
                                    [table:protected] => 
                                    [primaryKey:protected] => id
                                    [keyType:protected] => int
                                    [perPage:protected] => 15
                                    [incrementing] => 1
                                    [timestamps] => 1
                                    [attributes:protected] => Array
                                        (
                                            [id] => 14
                                            [skill_category_id] => 1
                                            [name] => CSS
                                            [progress] => 75
                                            [created_at] => 2016-07-30 21:49:13
                                            [updated_at] => 2016-07-30 21:49:13
                                        )

                                    [original:protected] => Array
                                        (
                                            [id] => 14
                                            [skill_category_id] => 1
                                            [name] => CSS
                                            [progress] => 75
                                            [created_at] => 2016-07-30 21:49:13
                                            [updated_at] => 2016-07-30 21:49:13
                                        )
...

Dans mon debug je vois bien qu'il me récupère les informations sauf que le problème vient quand j'essaie de récuperer les compétences de la catégorie j'ai essayé diverses méthodes telles que : {{ $skill->skills->name }} et j'ai une erreur

Aurais-je raté quelque chose dans mon code ?

D'avance, merci.

3 réponses


Kareylo
Réponse acceptée

$skill->skills est un tableau, boucle dessus, en gros, tu dois avoir une boucle dans une boucle. Une pour la catégorie, une pour les compétences

Selmac
Auteur

J'ai aussi tenté le foreach dans le foreach et il ne me retourne que 1

Édit : Autant pour moi, j'avais oublié une information dans ma seconde boucle

Théoriquement, ton premier foreach devraient te retourner les catégories, ensuite, tu dois boucler pour chaque catégorie sur les skills pour pouvoir tomber sur les données de ton objet