lundi 17 juin 2019

How to retrieve and display relationship data in Laravel?

I have three tables in database. orders, products and order_product table. this is how they look like in my phpmyAdmin https://imgur.com/a/Ud9e2Hh I would like sellers to see orders placed by buyers in their view (dashboard). Also buyers to be able to see their orders in their view.

Here are my relationships in models

User.php

 <?php
 namespace App;
 use Illuminate\Notifications\Notifiable;
 use Illuminate\Contracts\Auth\MustVerifyEmail;
 use Illuminate\Foundation\Auth\User as Authenticatable;

 class User extends Authenticatable
 {
 use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
 protected $fillable = [
    'name', 'email', 'password', 'Seller'
 ];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
 protected $hidden = [
    'password', 'remember_token', 
 ];

//public function isSeller() {
 //   return $this->seller;
//}

 public function products()
 {
  return $this->hasMany(Products_model::class);
 }
/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
 protected $casts = [
    'email_verified_at' => 'datetime',
 ];

 public function orders()
 {
   return $this->hasManyThrough(Order::class, Products_model::class, 'buyer_id', 'seller_id', 'product_id');
 }

 public function orderFromBuyers()
 {
  return $this->hasManyThrough(OrderProduct::class, Products_model::class, 'buyer_id', 'product_id');
 }

 public function orderFromSellers()
 {
    return $this->hasManyThrough(OrderProduct::class, Products_model::class, 'seller_id', 'product_id');
 }
 }

OrderProduct.php

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class OrderProduct extends Model
{
 protected $table = 'order_product';
 protected $fillable = ['order_id', 'buyer_id', 'seller_id','product_id', 'quantity'];

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

  public function buyer()
  {
    return $this->belongsTo(User::class, 'id', 'buyer_id');
  }

  public function seller()
  {
    return $this->belongsTo(User::class, 'id', 'seller_id');
   }

 public function order()
  {
  return $this->belongsTo(Order::class);
   }
   }

Order.php

 <?php
 namespace App;
 use Illuminate\Database\Eloquent\Model;
 class Order extends Model
 {
//protected $table = 'orders';
 protected $fillable =  [
    'shipping_email', 'shipping_name', 'shipping_city', 'shipping_phone', 'billing_subtotal', 'billing_total',
  ];

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

  public function products()
  {
    return $this->belongsToMany('App\Products_model')->withPivot('quantity');
  }

 public function orders(){
     return $this->hasMany('App\OrderProduct', 'order_id');
 }

 }

Seller Function

   // Seller Orders 
  public function viewOrders(User $user)
   {

  // $products = Products_model::where('seller_id', '=', $user->id)->get();
  // all sells
  $sells = $user->orderFromSellers();
  dd($sells);
  return view('orders')->with(compact('sells'));

   }

Buyer Function

 //Buyer Orders
  public function myOrders()
  {
  $cart = session();
  $orders = Auth::user()->orders;
  $orders->transform(function($order, $key){
    dd($orders);
      $order->cart = unserialize($order->cart);
      return $order;
  });
  return view('myOrders', ['orders' => $orders]);
  }

Right now it shows nothing. Any help on how to solve this will be appreciated.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire