2016-04-09 1 views
3

Dans mon projet, j'ai des commandes qui ont de nombreux produits et clients qui ont beaucoup de commandes. Je suis confus parce que je veux obtenir toutes les commandes qu'un certain client a et les produits de chaque commande. J'ai foiré quelque chose quelque part et je ne suis pas sûr si j'ai réglé mes relations correctement. Voici ma table des produits:Impossible d'afficher les données en vue du modèle dans Laravel

enter image description here

Voici ma table de clients:

enter image description here

Et voici ma commande tableau:

enter image description here

Voici mes modèles :

Produit:

class Product extends Model 
{ 
    public function orders() 
    { 
     return $this->belongsToMany('App\Order'); 
    } 
} 

Ordre:

class Order extends Model 
{ 
    public function products() 
    { 
     return $this->hasMany('App\Product', 'id'); 
    } 

    public function customer() 
    { 
     return $this->belongsTo('App\Customer'); 
    } 
} 

Client:

class Customer extends Model 
{ 
    public function orders() 
    { 
     return $this->hasMany('App\Order', 'id'); 
    } 
} 

Je reçois tous les clients de ma base de données avec App\Customer::all() dans mon CustomersController et transmettre les données dans mon customers.blade .php.

<h1>Customers:</h1> 
    @foreach($customers as $customer) 
     <h3>{{$customer->name}}</h3> 
     @foreach($customer->orders as $order) 
     <p>Order ID: {{$order->id}}</p> 
      @foreach($order->products as $product) 
      <p>Product title: {{$product->title}}</p> 
      @endforeach 
     @endforeach 
     <hr> 
    @endforeach 

est ici la sortie:

enter image description here

Si quelqu'un pourrait expliquer pourquoi il fait tout pas sortie et donner quelques conseils si cela est la voie à suivre avec les relations, je serais très reconnaissant.

+0

Essayez de changer {{}} en {!! !!} –

+0

pour changer le modèle 'return $ this-> hasMany ('App \ Product', 'id');' retourner '$ this-> hasMany ('App \ Product');' –

Répondre

0

J'ai trouvé une solution en faisant un tableau croisé dynamique pour les produits et les commandes appelé products_orders qui détient le product_id et l'order_id et de faire une relation plusieurs à plusieurs entre le produit et l'ordre. C'est parce qu'une commande peut avoir plusieurs produits et produits peuvent exister dans plusieurs commandes. ma table pivot products_orders:

enter image description here

class Product extends Model 
{ 
    public function orders() 
    { 
     return $this->belongsToMany('App\Order'); 
    } 
} 

class Order extends Model 
{ 
    public function products() 
    { 
     return $this->belongsToMany('App\Product', 'products_orders'); 
    } 

    public function customer() 
    { 
     return $this->belongsTo('App\Customer'); 
    } 
} 

je fait une relation un à plusieurs (customer_id dans le tableau des commandes) pour le client et l'ordre et maintenant tout fonctionne très bien.

class Customer extends Model 
{ 
    public function orders() 
    { 
     return $this->hasMany('App\Order'); 
    } 
} 
1

Vos produits doivent appartenir à une commande, plutôt que d'avoir une relation plusieurs-à-plusieurs.

class Product extends Model 
{ 
    public function orders() 
    { 
     return $this->belongsTo('App\Order'); 
    } 
} 
+0

Je l'ai changé mais il n'imprime toujours pas tous les produits dans l'ordre d'un client. – Codearts

+0

Désolé de ne pas avoir répondu plus tôt, j'ai été absent pendant une journée.Je n'avais pas réalisé que vous aviez réellement besoin d'une relation plusieurs-à-plusieurs, mais je suis content que vous ayez trouvé la bonne réponse vous-même. :) –