whereHas('oCategory', function ($q) { $q->where(function ($query) { // 1. 没有配置 noindexday,或者 noindexday = 0 的文章,一直保留 $query->whereNull('aOpt') ->orWhereRaw("JSON_UNQUOTE(JSON_EXTRACT(aOpt, '$.noindexday')) IS NULL") ->orWhereRaw("JSON_UNQUOTE(JSON_EXTRACT(aOpt, '$.noindexday')) = '0'") // 2. 配置了天数的,只取 N 天内创建的新文章 ->orWhereRaw("articles.created_at >= NOW() - INTERVAL CAST(JSON_UNQUOTE(JSON_EXTRACT(aOpt, '$.noindexday')) AS UNSIGNED) DAY"); }); }) ->orderBy('created_at', 'desc') ->get(); $sXmlContent = view('sitemap', [ 'cArticles' => $cArticles ])->render(); return response($sXmlContent, 200)->header('Content-Type', 'text/xml'); } }