Где в проекте Laravel разместить код, который считывает данные из таблиц базы данных, что может быть общим для нескольких контроллеров? - PullRequest
0 голосов
/ 18 июня 2020

Фон:

Я впервые столкнулся с любым фреймворком MVC, так как я разрабатываю небольшое приложение с PHP веб-фреймворком Laravel v6 и MongoDB (с jenssegers moloquent) в качестве движка базы данных. Я следую этой серии руководств, чтобы изучить Laravel 6.

Обычно, когда я использовал для разработки таких приложений простой php, я создавал один файл с именем readFromDb.php и в я бы нашел / прочитал / выбрал данные из всех таблиц БД (коллекции в Mongodb). Затем я бы включил его поверх каждого файла PHP, в котором мне нужно было бы выполнить некоторую обработку любых данных из БД.

Например, если у меня есть следующие коллекции

  1. allPaintingsCollection
  2. paintingHistoriesCollection
  3. paintingCategoriesCollection
  4. artGalleriesCollection
  5. paintingArtistsCollection
  6. supervisorArtistsCollection
  7. smPlatformsCollection
  8. nonSmPlatformsCollection
  9. targetSchoolsCollection

Я бы выделил все записи / документы из них в ассоциативные массивы в readFromDb.php, а затем включают readFromDb.php в верхней части каждой страницы, где мне нужно будет отображать или обрабатывать данные из БД.

Вопрос:

Теперь, в Laravel, должен ли я создать такой скрипт с именем readFromDb.php и включать его поверх каждого функция в каждом контроллере? В таком случае, где мне поместить этот readFromDb.php файл и как включить его в контроллеры?

Или мне следует написать код для чтения из соответствующей коллекции / таблицы БД в каждом функция в каждом контроллере, прежде чем использовать эти данные из БД?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Laravel имеет Eloquent ORM что представляет Object Relation Mapping interface.

Во введении:

Eloquent ORM включен with Laravel предоставляет красивую и простую реализацию ActiveRecord для работы с вашей базой данных . Каждая таблица базы данных имеет соответствующую «Модель», которая используется для взаимодействия с этой таблицей. Модели позволяют вам запрашивать данные в ваших таблицах, а также вставлять новые записи в таблицу.

По сути, то же самое, что и ваш readFromDb.php файл, но он обрабатывает OOP, поэтому codebase очень понятна и расширяема и строго связана с вашим кодом.

При запросах с Eloquent вы используете Models. Если результат вашего запроса имеет одну строку, вы получите одну Модель , если ваш результат содержит несколько строк, вы получите Eloquent \ Collection набор результатов, содержащий ваши модели.

Наконец, вы не должны писать ORM в Laravel, потому что у вас уже есть.

Если вы думаете, что абстрактные аксессоры высокого уровня; вам следует изучить шаблоны проектирования. После этого вы можете подумать о шаблоне репозитория, шаблоне декоратора и т. Д. c.

1 голос
/ 18 июня 2020

Я использую класс и называю его repository для обработки всего моего запроса через базу данных

Сначала я создаю файл UserRepository

<?php

namespace App\Repositories;

use App\Model\User;

class UserRepository
{
    function getUsers(){
       Return User::get();    
    }
}

Затем в контроллере вы просто нужно вызвать repository в родительском элементе contruct

<?php

namespace App\Http\Controllers;
use App\Repositories\UserRepository;

class UserController extends Controller
{
    protected $user;
    function __construct(){
        $this->user = new UserRepository();
    }

    function index(){
        $users = $this->user->getUser(); // getUser() is the function inside the repository class
        return view('user',compact('users'));
    }

}

Вот как я кодирую в laravel, потому что я не хочу вызывать Laravel Model и делать все хранилище, читается внутри Контроллер и код причины

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...