Search code examples
phplaravelcollectionseloquenteloquent-relationship

Laravel working with nested collection delete nested branch


unable to delete all nested branches where "product" => null Have a query

$cartWhere['user_id'] = $user_id;
$cartWhere['site_id'] =$currentSite->id;

$item = Cart::select('product_id','quantity')->with(['product' => function($product) use ($search){
$product->join('product_translations', 'products.id', '=', 'product_translations.product_id');
$product->where( 'product_translations.name', 'LIKE','%'.$search.'%');
        },'product.manufacturer:id,name'])
->where($cartWhere)->get();

then I receive collection that has all filtered carts but some of these carts have a relation with product => null

  1 => App\Models\Cart {#736 ▼
      ...
      #original: array:2 [▼
        "product_id" => 1
        "quantity" => 2
      ]
     ...
      #relations: array:1 [▼
        "product" => App\Models\Product {#785 ▶}
      ]
  }
  2 => App\Models\Cart {#736 ▼
      ...
      #original: array:2 [▼
        "product_id" => 2
        "quantity" => 2
      ]
     ...
      #relations: array:1 [▼
        "product" => null
      ]
  }

sorry for my English


Solution

  • You can filter them from the results using the collections filter() method

    $item = Cart::select('product_id','quantity')
                ->with(['product' => function($product) use ($search) {
                    $product->join('product_translations', 'products.id', '=', 'product_translations.product_id');
                    $product->where( 'product_translations.name', 'LIKE','%'.$search.'%');
                }, 'product.manufacturer:id,name'])
               ->where($cartWhere)
               ->get()
               ->filter(function ($cart) {
                   return $cart->product !== null;
               });