Laravel по-русски

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

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

#1 04.11.2017 07:01:03

Имена полей SQLServer

Спасибо за труд. В целом все хорошо описано для начинающего, а вот с именованием столбцов в бд вопрос довольно относительный и в зависит от используемой бд. Например, работая с sqlserver практически всегда имена полей в camel case с ключами вида ИмяМоделиId или ИмяМоделиID.

SPR, это конечно хорошо. Но, если у вас очень простое приложение и метод контроллера укладывается в 10-15 строк без необходимости где-либо переиспользовать, то не вижу смысла размазывать код, усложняя себе жить и плодить кучу классов.

Ко всем бест практикам нужно прийти, а это понимание появляется отнюдь не сразу. Например, поставил задачу перед жуниором написать простой парсер хмл, на базе уже существующего кода. В примере использовались интерфейсы, абстрактные классы, инжектились через ioc. Так вот он пытался по строкам сделать тоже самое буквально и шаг влево, шаг вправо - пожимал плечами, мол не знаю, не работает и тд.

На практике часто использую Request только в контроллере, сформировал нужный мне пакет (это или класс или массив, вопрос предпочтений)

    /**
     * Return pagination list of the apartments
     * @param Request $request
     * @param $language
     * @param int $page
     * @param int $pageSize
     * @return \Illuminate\Http\JsonResponse
     */
    public function getApartmentsJson(Request $request, $language, $page = 1, $pageSize = 10)
    {
        $pLang = $this->getLanguage($language);

        //get filter value
        $data = $request->all();
        $request = (new ApartmentRequest())
            ->setReference(array_get($data, 'reference'))
            ->setTypeOperation(array_get($data, 'typeOperation'))
            ->setTypeApartment(array_get($data, 'typeApartment'))
            ->setProvince(array_get($data, 'province'))
            ->setAreaPlotMin(array_get($data, 'areaPlotMin'))
            ->setAreaPlotMax(array_get($data, 'areaPlotMax'))
            ->setBedrooms(array_get($data, 'bedrooms'))
            ->setPriceMin(array_get($data, 'priceMin'))
            ->setPriceMax(array_get($data, 'priceMax'))
            ->setOrderBy(array_get($data, 'orderBy'));

        return response()->json($this->getApartments($request, $pLang, $page, $pageSize));
    }

И дальше пакет гоняю как захочется.

    /**
     * Return list of the apartments, using request can use filter and order functionality
     * @param ApartmentRequest $request
     * @param PLanguage $language
     * @param int $page
     * @param int $pageSize
     * @return ApartmentResult
     */
    public function getApartments(ApartmentRequest $request, PLanguage $language, $page = 1, $pageSize = 1)
    {
        if($pageSize > 50)
            $pageSize = 10;

        $shortName = $language->shortName;
        $builder = $this->builder($request);
//        if run after get() return 0;
        $countRow = $builder->count();

        $client = Auth::user();

        $transformer = new ApartmentTransformer();
        $apartments = $builder->skip(($page - 1) * $pageSize)->take($pageSize)->get()->transform(function(Apartment $item) use ($transformer, $shortName, $client) {
            return $transformer->transformBasic($item, $shortName, $client);
        });

        $result = new ApartmentResult($apartments, new Page($countRow, $page, $pageSize), $language);

        return $result;
    }

Изменено lodar (04.11.2017 07:21:30)

Не в сети

#2 04.11.2017 08:32:32

Re: Имена полей SQLServer

В целом все хорошо описано для начинающего, а вот с именованием столбцов в бд вопрос довольно относительный и в зависит от используемой бд. Например, работая с sqlserver практически всегда имена полей в camel case с ключами вида ИмяМоделиId или ИмяМоделиID.

Разве нельзя использовать snake_case?

SPR, это конечно хорошо. Но, если у вас очень простое приложение и метод контроллера укладывается в 10-15 строк без необходимости где-либо переиспользовать, то не вижу смысла размазывать код, усложняя себе жить и плодить кучу классов.

Согласен. Но ависит от того, что именно в этих 10-15 строках.

Не в сети

#3 04.11.2017 12:10:17

Re: Имена полей SQLServer

Разве нельзя использовать snake_case?

Можно конечно, но если у вас структура бд уже создана не вами или возможно предполагается использовать бд совместно с другими сервисами написанными на c# например. Там есть свои договоренности и по именованию полей, методов и свойств. Конечно все можно переопределить атрибутами и тд, но зачем? Я работаю очень часто с laravel и asp.net, net core, поэтому для меня использовать кэмел кейс как-то более эстетично. Это все субьективно и зависит от команды разработчиков.

Не в сети

#4 04.11.2017 12:39:33

Re: Имена полей SQLServer

Можно конечно, но если у вас структура бд уже создана не вами или возможно предполагается использовать бд совместно с другими сервисами написанными на c# например. Там есть свои договоренности и по именованию полей, методов и свойств. Конечно все можно переопределить атрибутами и тд, но зачем? Я работаю очень часто с laravel и asp.net, net core, поэтому для меня использовать кэмел кейс как-то более эстетично. Это все субьективно и зависит от команды разработчиков.

Спасибо за разъяснение. Если нет прямых требований использовать camelCase, то лучше все-таки использовать snake_case, чтобы полностью использовать магические методы Laravel, читатели и преобразователи (accessors и mutators), краткие определения связей без указывания конкретных наименований столбцов и т.д.

Не в сети

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