Squeak.ru - шаблоны программирования

Есть ли лучший способ, чем выполнение нескольких запросов в моем случае?

Я начинаю в laravel, и я хотел бы узнать ваше мнение по одному вопросу.

У меня есть контроллер. В этом контроллере я возвращаю представление и несколько функций, которые являются SQL-запросами.

В моем представлении должны быть все эти запросы, потому что я отображаю разные типы foreach. Это правильный способ сделать или есть что-то более короткое/более подходящее?

Мой контроллер:

 protected function indexWeb()
{
    return view('pages.web.program', [
        'getAllCoursesBloc1' => $this->getAllCoursesBloc1(),
        'getAllCoursesBloc2' => $this->getAllCoursesBloc2(),
        'getAllCoursesBloc3' => $this->getAllCoursesBloc3(),
        'getWebCoursesBloc1' => $this->getWebCoursesBloc1(),
        'getWebCoursesBloc2' => $this->getWebCoursesBloc2(),
        'getWebCoursesBloc3' => $this->getWebCoursesBloc3(),
        $this->setMetasIndex()
    ]);
}

protected function getAllCoursesBloc1()
{
    $courses = Course::where('bloc', 1)
                     ->OrderBy('title', 'ASC')
                     ->get();
    return $courses;
}

protected function getAllCoursesBloc2()
{
    $courses = Course::where('bloc', 2)
                     ->OrderBy('title', 'ASC')
                     ->get();

    return $courses;
}
... and so on

Пример foreach на мой взгляд

@foreach($getWebCoursesBloc1 as $key => $course)
    <tr class="link-row" data-href="{{ $course->slug }}">
        <td class="program-table__orientation">{{ $course->orientation }}</td>
        <td class="program-table__course">
            <a href="{{ url('cours/'.$course->slug) }}" class="program-table__course__link">
                <span class="program-table__course__name">{{ $course->title }}</span>
            </a>
            <span class="program-table__course__desc">{{ $course->shortdescription }}</span>
        </td>
        <td class="program-table__hour"><span>{{ $course->duration }}</span></td>
        <td class="program-table__ects"><span>{{ $course->ects }}</span></td>
        <td class="program-table__quad"><span>{{ $course->quadrimester }}</span></td>
    </tr>
@endforeach

Большое спасибо

09.05.2017

  • Вы должны отделить запросы от контроллера. Например. переместите их в модель или, если вы используете слой репозитория, вы должны поместить их туда 10.05.2017

Ответы:


1

Используйте whereIn() в модели Laravel.

public static function getAllCoursesByIds(array $ids)
{
    return self::whereIn('bloc', $ids)
        ->orderBy('title', 'asc)
        ->get();
}

В контроллере вы можете получить доступ:

public function indexWeb()
{
    return view('pages.web.program', [
        'all_courses' => Course::getAllCoursesByIds([1,2,3,4,5]),
    ]);
}

В противном случае вы можете отфильтровать их по конкретным идентификаторам. На ваш взгляд, вызовите $all_courses.

Чтобы получить курсы с блоком, равным 1, используйте:

$all_courses->filter(function ($course, $key) {
    return $course->bloc === 1;
});
09.05.2017

2

Вы понимаете, что все эти вызовы БД в настоящее время синхронны и между ними нет никакой зависимости. Теоретически, если бы вы могли вызывать их асинхронно, скрипт выполнялся бы быстрее, потому что он отрисовывается, как только возвращается последний элемент.

Для этого нужно делать рендеринг в клиенте (javascript), а не на сервере. Обещания или Async/Await, вероятно, будет работать лучше всего. В конечном итоге ваш клиент будет выполнять все асинхронные вызовы вашей веб-службы на основе laravel, и как только они будут завершены, она будет отображаться. Вы можете обнаружить, что вам даже не нужно ждать их всех, и рендеринг также может быть асинхронным.

Возможно, вы могли бы сделать это, используя только PHP с чем-то вроде ReactPHP.

09.05.2017
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...