[英]How to perform a statement inside a query to check existence of a file that has the query id as name with less resources in laravel
我正在尋找查詢“ id”是否具有與文件系統中的名稱具有相同ID的文件夾,我做到了,但是將來會因文件過多而減慢驅動器的速度
$query = Model::all();
if(Input::get('field') == 'true'){
$filenames = scandir('img/folders');
$query->whereIn('id', $filenames);
}
如您所見,它將掃描並獲取“ folders”目錄中所有文件夾的名稱並使用它創建一個數組,現在我的應用程序將來將擁有成千上萬個文件夾,我想在此之前對其進行解析發生,謝謝您的進一步幫助
ps:歡迎其他建議以其他方式做到這一點
您是否有充分的理由相信包含大量文件夾的目錄中的scandir實際上會使您減速?
您可以這樣查詢:
if(Input::has('field')){
$filenames = scandir('img/folders');
$query = Model::whereIn('id', $filenames)->get();
}
編輯1
您可能會發現以下鏈接有用:
編輯2
鏈接中有一些非常好的建議,您應該可以將它們用作指導以進行自己的實施。 如我所見,根據我進行的第一次編輯所包含的鏈接,您的選擇是使用DirectoryIterator
, readdir
或帶有scandir
分塊。
這是一種非常基本的方法,但是我想您可以使用readdir來做些這樣的事情:
$ids = Model::lists('id');
$matches = [];
if($handle = opendir('path/to/folders'))
{
while (($entry = readdir($handle)) !== false)
{
if(count($ids) === 0)
{
break;
}
if ($entry != "." && $entry != "..")
{
foreach ($ids as $key => $value)
{
if($value === $entry)
{
$matches[] = $entry;
unset($ids[$key]);
}
}
}
}
closedir($handle);
}
return $matches;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.