[英]Laravel imap get messages sorted by most recent
我正在使用laravel-imap從郵箱中檢索消息:
$aMessage = $selectedFolder->query()->setFetchFlags(true)->setFetchBody(true)->setFetchAttachment(false)->leaveUnread()
->limit(40, $highest_page)->get();
默認情況下,最近的消息位於最高頁面。 如果我只是獲取所有消息並按原樣顯示它們,我會首先看到舊消息(第 1 頁)。
到目前為止我嘗試過的:
在我調用->get()
,結果可以被視為一個普通的 laravel 集合,但是我沒有成功使用這些方法:
$aMessage = $aMessage->sortByDesc('date')->values()->all();
$aMessage = $aMessage->sortByDesc(function ($item) {
//\Log::info(print_r($item, true));
return $item->date;
})->values()->all();
我確定上述方法不起作用,因為我使用->limit(40, $highest_page)
,這意味着集合的大小為 40。
如果我不限制結果並使用 slice 我會遇到超時錯誤,因為郵箱中的消息太多:
$aMessage = $selectedFolder->query()->setFetchFlags(true)->setFetchBody(true)->setFetchAttachment(false)->leaveUnread()
->get()->reverse()->slice(0, $messages_per_page);
我也試過 laravel-imap 的方法paginate()
。 結果與limit()
相同。
在這一點上,我確信我必須在結果變成集合之前以某種方式進行排序。 我還發現:
'options' => [
'fetch_order' => 'desc',
]
選項已添加到客戶端。 我試過升序和降序。 我也清除了配置緩存,但沒有任何效果。
我仍然在第 1 頁看到最早的結果,在最后看到最新的結果。
有人有更多想法嗎?
在嘗試了幾個解決方案之后,我決定進入供應商文件(config/imap.php)並在那里更改 fetch_order:
'fetch_order' => 'desc'
默認情況下是 asc。 似乎在創建客戶端時更改 fetch_order 不會覆蓋配置。 我以前有過這個,但它不起作用,也沒有拋出錯誤:
$this->oClient = new Client([
'host' => env('MAIL_HOST_IN'),
'port' => env('MAIL_PORT_IN'),
'encryption' => env('MAIL_ENCRYPTION_IN'),
'validate_cert' => true,
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'protocol' => 'imap',
'options' => [
'fetch_order' => 'desc',
]
]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.