我正在从Excel加载数据。在foreach中,我正在检查每个记录是否确实存在于数据库中:
$recordExists = $this->checkIfExists($record);
function checkIfExists($record) {
$foundRecord = $this->repository->newQuery()
->where(..., $record[...])
->where(..., $record[...])
...
->get();
}
当excel最多包含1000个值(相对较小的数据)时,代码将运行2分钟左右。我想这是一种非常低效的方法。
我当时正在考虑将已加载的数据数组传递给方法checkIfExists
,但是后来我无法查询该数据。
将如何进行?
答案 0 :(得分:0)
如果您想在很短的时间内做很多工作,可以使用laravel队列。您的代码将在后端运行。客户无法识别该过程。只是向客户显示此进程正在排队的消息。就是这样
您可以从以下网址查看官方文档 https://laravel.com/docs/5.8/queues
答案 1 :(得分:0)
如果您将所有数据从数据库传递到函数(这样就不再对数据库进行查询),则可以使用laravel集合函数进行过滤。
其中一个是where
=> https://laravel.com/docs/5.8/collections#method-where
function checkIfExists($record, Collection $fetchedDataFromDatabase) {
// laravel collectons 'where' function
$foundRecord = $fetchedDataFromDatabase
->where(..., $record[...])
->where(..., $record[...]);
}
其他有用的功能。