簡體   English   中英

如何在查詢中執行語句以檢查是否存在以laravel中資源較少的名稱作為查詢ID的文件

[英]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

您可能會發現以下鏈接有用:

PHP:scandir()太慢

獲取目錄中的文件

編輯2

鏈接中有一些非常好的建議,您應該可以將它們用作指導以進行自己的實施。 如我所見,根據我進行的第一次編輯所包含的鏈接,您的選擇是使用DirectoryIteratorreaddir或帶有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM