Ad

Eloquent Only Get First Active Query

- 1 answer

hey guys i have a confusing question

I have 3 tables

  1. basket_lists (carts)
  2. basket_items (carts_item)
  3. products

with this migrate

 'basket_lists':
        $table->bigIncrements('id');
        $table->unsignedBigInteger('user_id');
        $table->boolean('active');
        $table->timestamps();


    basket_items:
        $table->bigIncrements('id');
        $table->unsignedBigInteger('product_Id');
        $table->unsignedBigInteger('basket_list_id');
        $table->timestamps();


       products:
        $table->bigIncrements('id');
        $table->string('title');
        $table->text('description');
        $table->bigInteger('amount');
        $table->timestamps();

I have some products in my table , when i search (query) {

BasketList::where('active', '=', 1)->with('basketItems.products')->get();

it only gives me the first basketlist products (where id = 1) if i insert new basketlist and set the first basketlist to (active = 0) and second one to (active = 1) it will not show any products.

Here is my model classes :

class BasketList extends Model
{
    public function basketItems()
    {
        return $this->hasMany(BasketItem::class ,'basket_list_id' );
    }
}

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


    public function basketList()
    {
        return $this->belongsTo(BasketList::class);
    }

}


public function basketItem() 
{
    return $this->belongsTo(BasketItem::class ,'product_id');
}
Ad

Answer

You must change your relationship to belongsTo()

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

    class BasketItem extends Model
    {
        //
        protected $table = 'basket_items';


        public function product()
        {
                return $this->belongsTo(Product::class, 'product_id','id' ); // Watch out for the case sensitive. how did you wright product_id in your migration. (product_id or product_Id)
        }
Ad
source: stackoverflow.com
Ad