#php #laravel #eloquent #xml-sitemap
#php #ларавель #красноречивый #xml-карта сайта
Вопрос:
Как я могу зациклиться на модели? У меня есть:
SitemapGenerator::create(config('app.url'))
->configureCrawler(function (Crawler $crawler) {
$crawler->setMaximumDepth(4);
})
->add(Url::create('https://mydomain/mycustompage/'))
->getSitemap()
->writeToFile(public_path('sitemap.xml'));
Мне нужно каким-то образом зациклить это: ->add(Url::create('https://mydomain/mycustompage/'))
Я хочу получить информацию из моей базы данных следующим образом:
$all_active_products = DB::table('products')->select('slug')->where('is_active',1)->whereNull('deleted_at')->get();
И я хочу что-то вроде этого:
$all_active_products = DB::table('products')->select('slug')->where('is_active',1)->whereNull('deleted_at')->get();
SitemapGenerator::create(config('app.url'))
->configureCrawler(function (Crawler $crawler) {
$crawler->setMaximumDepth(4);
})
foreach ($all_active_products as $a){
->add(Url::create('https://mydomain/mycustompage/'.$a->slug))
}
->getSitemap()
->writeToFile(public_path('sitemap.xml'));
Я использую этот пакет.
Комментарии:
1. Это хороший пакет, но у него есть проблемы. Мне пришлось выполнить 2 дополнительных шага, чтобы заставить его работать. На веб-сайте с 130.000 записями создаются страницы dito. Он работал на тесте, а не на prod (память). Вы можете ссылаться из XML-файла sitemap на другие вложенные карты. Я перебирал таблицы и строил подкарты построчно. Ознакомьтесь с проблемами на странице пакета. Там вы найдете немного вдохновения. В том числе и закрытые вопросы.
2. кроме того, я могу сгенерировать основную карту сайта с помощью этого пакета, чем создавать свой пользовательский цикл и добавлять свои новые данные в уже существующую карту сайта 🙂 надеюсь, есть более простой способ сделать это без нее 🙂
3. Я хотел создать команду, чтобы я мог ставить ее в очередь два раза в неделю с событием, связанным с заданием. Последнее выполняет тяжелую работу. Моя проблема заключалась в том, что на рабочем сервере закончилась память. Поэтому мне пришлось его разбить. Ничего особенного, но в целом мне потребовалось 3 дня, чтобы выполнить задачу. Роскошь сейчас в том, что laravel делает это автоматически благодаря диспетчеру очередей.
Ответ №1:
$products = Продукт::все(); //или $products = Product::with('категории')->where('статус', 1)->whereRaw('количество не равно нулю, А количество> 0', 1)->whereNotNull('цена'); //или $products = Продукт::выберите([ '*', DB::raw('(СЛУЧАЙ КОГДА sale_price не равно null И ( now() = sale_from, ТОГДА sale_price ДРУГАЯ цена КОНЕЦ) product_price') ])->where('статус', 1)->whereNotNull('цена'); //теперь для цикла foreach ($products как $key=>$product) { echo $product->название; }
Комментарии:
1. с sql проблем нет, мне нужен мой sql-результат каким-то образом в SitemamGenerator::