[英]Effiecient way to get data from database in foreach
我正在從excel加載數據。 在foreach中,我檢查每條記錄是否存在於數據庫中:
$recordExists = $this->checkIfExists($record);
function checkIfExists($record) {
$foundRecord = $this->repository->newQuery()
->where(..., $record[...])
->where(..., $record[...])
...
->get();
}
當excel包含最多1000個值,這是一個相對較小的數據 - 代碼運行大約2分鍾。 我猜這是非常低效的方法。
我正在考慮將加載數據的數組傳遞給方法checkIfExists
但是我無法查詢數據。
什么是進行的方式?
如果您想在很短的時間內完成大量工作,可以使用laravel隊列。 您的代碼將在后端運行。 客戶無法識別該過程。 只是向客戶端顯示此進程正在排隊的消息。 而已
您可以查看Url下面的官方文檔https://laravel.com/docs/5.8/queues
如果將所有數據從數據庫傳遞到函數(因此不再對數據庫進行查詢),則可以使用laravel collections函數進行過濾。
對他們的是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[...]);
}
其他有用的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.