首页 > 解决方案 > 是否可以一次获取数据并对其执行查询而不是 laravel 中的数据库?

问题描述

是否可以一次获取数据,然后对其执行查询而不是数据库。因为我正在为近 500 个客户进行计算。虽然我需要为数据库中的每个客户以相同的模式运行近 100 个查询,这就是为什么我要问我是否可以一次获取数据,然后对该数据而不是数据库执行查询。因为每次为每个客户增加mysql cpu消耗

我现在在做什么

foreach($customers as $customer)
{
 $customer_charge=  CustomerCharge::where('customer_id',$customer->id)->with('rate_charge')->with('chilled_rate_card')-->with('frozen_rate_card')->get()
$this->calculateConsignment($customer_charge);
}

我想那样做

$customer_charge=  CustomerCharge::whereIn('customer_id',[array])->with('rate_charge')->with('chilled_rate_card')-->with('frozen_rate_card')->get()


Now find() here customer charge form $customer_charge object instead of database

如果可以,那有可能吗?

那可能吗 ?

标签: phpmysqllaravellaravel-5eloquent

解决方案


的。

当你执行查询时,Laravel 会返回一个 Eloquent 集合,它允许你仍然可以调用相同的方法来检索特定数据:

$customer_ids = $customers->pluck('id'); // Assuming $customers is an Eloquent Collection

$charges =  CustomerCharge::whereIn('customer_id', $customer_ids)
        ->with('rate_charge')
        ->with('chilled_rate_card')
        ->with('frozen_rate_card')
        ->get();

foreach($customers as $customer)
{
    $customer_charge =  $charges->where('customer_id', $customer->id)->first(); // querying the already retrieved $charges data, not the database
    $this->calculateConsignment($customer_charge);
}

推荐阅读