gpt4 book ai didi

php - 没有预先加载的 Laravel 4.2 n+1

转载 作者:行者123 更新时间:2023-11-30 22:17:15 25 4
gpt4 key购买 nike

我有一张产品表

products
------------------------------------------------
id product_code purchase_type quantity
1 106 new 1
2 107 renew 3

和产品价格表

price_list
----------------------------------------------------------------------
id product_code purchase_type minimum maximum unit_price
1 106 new 1 25 20
2 106 new 26 50 16
3 106 new 51 100 14

当我在页面上显示产品时,我需要用公式显示价格

getPrice(product_code, purchase_type, quantity) for every product

使用

foreach(Product::all() as $product){
{{ $product->product_code }}
{{ $product->purchase_type }}
{{ $product->quantity }}
{{ PriceList::getPrice($product->product_code, $product->purchase_type, $product->quantity) }} - this one is the n+1 problem
}

PriceList::getPrice() 类似于:

public static function getPrice($productCode, $purchaseType, $quantity){
return PriceList::where('product_code', $productCode)
->where('purchase_type', $purchaseType)
->where('minimum', '>=', $quantity)
->where('maximum', '<=', $quantity)
->get()->first()->unit_price;
}

我似乎找不到更有效的方法。当我展示超过 1000 种产品时,它会变得非常慢。我似乎找不到使用预加载的方法。

最佳答案

从内部循环调用模型来获取数据不是一个好主意。

不是那样做,而是按照下面的方式。

你应该定义relationship在 Product 和 PriceList 表之间。

在模型 Product.php 中

 public function price_list(){
return $this->hasMany('PriceList','product_code');
}

在模型 PriceList.php 中

 public function product(){
return $this->belongsTo('Product','product_code');
}

在 Controller 文件中

 $products = Product::with('price_list')->get();
return View::make('your_view')->with('products', $products);

在查看文件中(文件必须有扩展名.blade.php才能使用下面的语法)

 @foreach($products as $product)
{{ $product }}
@endforeach

注意:- 在 Controller 中打印 $products 以检查结果。

关于php - 没有预先加载的 Laravel 4.2 n+1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37877997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com