skip to Main Content

I have two models EcommerceOrders and Medicines

class EcommerceOrders extends Model
{
    use HasFactory;

    protected $table = 'ecommerce_orders';

    protected $fillable = [
        'user_id',
        'manager_id',
        'first_name',
        'last_name',
        'phone_number',
        'email',
        'address',
        'city',
        'zip_code',
        'other_info',
        'products',
        'total_price',
        'qr_code',
        'status',
        'assigned_to',
        'save_client_info',
    ];

class Medicines extends Model
{
    use HasFactory;
    use Notifiable;
    use SoftDeletes;

    /**
     * The attributes that are mass assignable.
     *
     * @var string[]
     */

    protected $table = 'medicines';
  
    protected $fillable = [
        'name',
        'subcategory_id',
        'group',
        'unity',
        'description',
        'price',
        'discount',
        'type',
        'photo_path',
        'slug'
    ];

In the EcommerceOrders Model the products field holds info about the items purchased by a client
What I’m trying to do is to get the data about those products.This is how i have created the relationships in each model

EcommerceOrders

public function items()
    {
        return $this->hasMany(Medicines::class,'id');
    }

Medicines

 public function ecomOrders()
 {
        return $this->belongsTo(EcommerceOrders::class);
 }

However when i try to get the data It only displays the information about the first item in products

 EcommerceOrders::where('id',3)->with('items')->get()

IlluminateDatabaseEloquentCollection {#3313
     all: [
       AppModelsEcommerceOrders {#3298
         id: 3,
         user_id: 2,
         manager_id: 3,
         first_name: "test",
         last_name: "test1",
         phone_number: "3550123456",
         email: "[email protected]",
         address: "addsss",
         city: "qwerr",
         zip_code: "625",
         other_info: null,
         products: "{"2":1,"3":1}", //id: quantity
         total_price: "8309,00",
         qr_code: "2416718593exKrLbcNEpVm3nYI6S31652402",
         status: "ordered",
         assigned_to: null,
         save_client_info: 1,
         created_at: "2022-11-22 17:35:32",
         updated_at: "2022-11-22 17:35:32",
         items: IlluminateDatabaseEloquentCollection {#3315
           all: [
             AppModelsMedicines {#3327
               id: 3,
               group: 11,
               name: "quisquam",
               subcategory_id: 8,
               unity: "499mg",
               description: "Quo autem aut quibusdam dolorem aut sit.",
               price: 6935.0,
               discount: 9.0,
               type: 0,
               photo_path: "https://via.placeholder.com/640x480.png/009900?text=laudantium",
               slug: "quisquam",
               created_at: "2022-11-21 11:39:29",
               updated_at: "2022-11-21 11:39:29",
               deleted_at: null,
             },
           ],
         },
       },
     ],
   }

3

Answers


  1. EcommerceOrders::where('id',3)->with('items')->get()
    

    this query only gets the row where the id is 3
    and since it is and increment ID, only 1 item will be ID:3

    Login or Signup to reply.
  2. This is how you can retrieve hasMany relation data

    $items = EcommerceOrders::find(1)->items;
    
    foreach($items as $item){
        //
    
    }
    
    Login or Signup to reply.
  3. //this is how you can retrieve hasMany data in different tables.

    $items = EcommerceOrders::find(auth->user())->items;

    foreach($items as $item)
    {

    //

    }

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search