Мне нужен цикл внутри запроса модели

#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::