Bonsoir,

Je réalise une page ou sont affiché les détails de facturation par étudiant

Voici mes tables

orders (date, price_id, student_id)
student (id, first_name, last_name, grade, ....)
prices (id, label, price)

Orders
date       | price_id     | student_id |
*************************************
13-09-2016 | 1            | 2
14-09-2016 | 1            | 2

et j'aimerai savoir si il est possible de faire ceci de manière simple avec Laravel afin de
pouvoir mieux utiliser les données dans la vue.

[
// Etudiant John Doe
0 => StdClass Object {
        [first_name] => John,
        [last_name] => Doe,
        [details] => [ 0 => StdClass Object {
                                        [count] => 17,
                                        [price] => 3.75,
                                        [amount] => 63.75,
                                        [label] => "Tarif Standard",
                                        }
                             1 =>  StdClass Object {
                                        [count] => 14,
                                        [price] => 0.20,
                                        [amount] => 2.80,
                                        [label] => "Absence justifiée"
                                        }
                               ]       
          [global_amount] => 63.95  
1 => StdClass Object {...}
    // Etudiant Régis Lafontaine
]   

4 réponses


tbm
Auteur
Réponse acceptée

EDIT : Cela fonctionne, il reste cependant d'autres choses qui ne fonctionnent pas mais je pense que je trouverai une solution

Merci de vos réponses,

En réalité, tu as raison Emix, je peux bien faire ce que je veux avec des relations mais Laravel semble ne pas réussir a savoir ce que je veux.
Voici ce que j'ai fait:

// Student.php
public function details(){
        return $this->hasMany('App\Order')
                    ->selectRaw('prices.label, prices.price, count(*) as count')
                    ->join('prices', 'orders.price_id', '=', 'prices.id')
                    ->groupBy('prices.id')
                    ;
    }
// UserController.php
$results = Student::with('details')->where(['user_id' => Auth::user()->id])->get()->toArray();
var_dump($results);

J'ai bien la bonne structure, mais il me manque les données dans "details"
Le toArray est normal pour le moment
Pourtant, la requête generée et executée sur phpMyAdmin fonctionne

[
// Etudiant John Doe
0 => StdClass Object {
      [first_name] => John,
      [last_name] => Doe,
      [details] => [ ]   
      // Tableau vide dans details
1 => StdClass Object {...}
    // Etudiant Régis Lafontaine
]   

Salut,
mettre en place des relations? C'est possible oui ^^ documentation parti relationships

tbm
Auteur

C'est une relation mais un peu plus poussé on va dire. Les relations ne permettent de récupérer qu'une collection de lignes d'une autre table. Ici c'est une relation qui va compter le nombre de commandes et le prix qui va avec ainsi que le total global de l'étudiant.

Les relations ne me permettent pas de faire ce que je veux faire en fait. A moins que vous ayez un exemple auquel je n'y avais pas pensé.

Si je ne dis pas de betise, lorsque tu fais une relation avec Eloquent, tu recuperes un objet Eloquent donc peut faire un aggregat dessus: https://laravel.com/docs/5.3/queries#aggregates