Laravel使用嵌套集合删除嵌套分支

时间:2020-08-06 08:26:07

标签: php laravel collections eloquent eloquent-relationship

无法删除"product" => null处的所有嵌套分支 进行查询

$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();

然后我收到具有所有已过滤购物车的集合,但是其中一些购物车与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
      ]
  }

对不起,我的英语

2 个答案:

答案 0 :(得分:1)

您可以使用集合filter()方法从结果中过滤出它们

$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;
           });

答案 1 :(得分:0)

with一起,您应该使用whereHas。因此,结果将不包含与null值的任何关系。这样一来,您还可以避免使用额外的filter方法。