Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 15.12.2015 15:22:44

Ajax, Foreach и Laravel

Всем привет!

Подскажите пожалуйста, у меня есть список отелей в БД и еще есть метод который принимает ID и возвращает мне цены. Я вызываю свой метод внутри цикла Foreach но выгрузка цен получается очень долгой, соответственно сама страничка долго грузится.

Хотел бы узнать у знатоков, как можно сначала загрузить страницу, а уже потом загрузить все цены через AJAX? Или каким то другим способом? Пока цены грузятся хотелось бы видеть какую то гифку)) загрузка))). Если это все возможно конечно.

Вот мой код:

@foreach($Hotels as $hotel)
    <img src="{{ asset($hotel->img) }}" width="800" height="533" class="img-responsive" alt="{{ $hotel->HotelName }}">
    <div id="score"><span>{{ $hotel->score }}</span>{{ $hotel->rating }}</div>
    From/For Night
    <span class="price">
    <sup>$</sup>
    <?php
        $price = 'NA';
        $price1 = XML::GetMinimumDBLPriceForTodayBB(APP-KEY, APP-NAME, $hotel->HotelID, 1);
        $price2 = XML::GetMinimumDBLPriceForTodayBB(APP-KEY, APP-NAME, $hotel->HotelID, 2);
        if(is_array($price1)){
            $price = round($price1[0]->DailyPrice);
        }elseif(is_array($price2)){
            $price = round($price2[0]->DailyPrice);
        }
     ?>
     {{ $price }}
     </span>
     <div class="hotel_title">
          <h3>{!! preg_replace("/ /", " </strong>", '<strong>'.$hotel->HotelName, 1 ) !!}</h3>
      <div class="rating">{{ $hotel->HotelClass }}</div>
@endforeach

Вот этот момент когда приходят цены в переменную $price грузит очень страницу.

Не в сети

#2 16.12.2015 05:51:46

Re: Ajax, Foreach и Laravel

Не следует логику пихать во вьюху. Все данные должна предоставлять модель.

$(document).ready(function() {
$.ajax({
  url: '/getdata', // путь до контролера, который выдает данные о цене
  type: 'POST',
  success: function(data){
      $('.gifka_s_animaciey').remove(); //убираем гифку с анимацией загрузки
     $('.price').html(data); //Вставляем значение цены. 
  }
});

Изменено Afatar (16.12.2015 05:52:26)

Не в сети

#3 16.12.2015 20:51:08

Re: Ajax, Foreach и Laravel

Afatar пишет:

Не следует логику пихать во вьюху. Все данные должна предоставлять модель.

+1

Не в сети

#4 18.12.2015 10:21:26

Bender

Re: Ajax, Foreach и Laravel

Я бы лучше в кэш просто цены запихал, они же не при каждой загрузке страницы меняются, более того они даже не каждую минуту меняются.

#5 18.12.2015 18:50:02

Re: Ajax, Foreach и Laravel

(не для MySQL)
цены можно кешировать и в БД например на базе хранимых процедур sql (проще говоря на триггерах и на функциях), когда какие-либо переменные в цепочке формирования цены меняются...
и читать оттуда.

однако это грязное чтение, означающее, что пока вы читали-формировали-выводили, - данные могли измениться.

чистое чтение и формирование данных налету штука отличная но трудоёмкая.

для начала надо проектировать бд в нормализованном виде, не оптимизированном (читай гугл!)
из нормализованных таблиц создавать view'шки, уже в виде оптимизированных таблиц, откуда и читать...
пишешь в таблицу А, читаешь из вьюшки Z состоящей из таблиц A+B+C.

тем самым кода рнр меньше, масштабируемости больше.

и опять же проект не ясен.
это паблик? если паблик, то забудь про чистое чтение. потому что кирпич на F5 на той странице, где формируются данные ... ну ты понял, братан smile

Не в сети

Подвал раздела