상업적인 요구로 인해 모두 관리 화면에 들어가고 방대한 조회는 아무 일도 일어나지 않을 것이다...

안녕하십니까?
평소 Laavel을 이용한 서비스 개발.
제목, 흔한 부탁 아닌가요...?
전부 화면이 들어와서 편하죠.알고 있습니다.
검색어에 존이 많죠?알고 있습니다.
응, 존은 별로 안 써?그래..
Eloquent 쓰세요?알고 있습니다.
tyamahori는 QueryBuilder를 사용합니다.
Laavel의QueryBuilder에서 반환 값은 stdClass 또는 stdClass의 모음집입니다.
이번에 stdClass를 매개 변수로 괜찮은 DTO반을 만들었어요!여러 곳에서 stdClass를 반복해서 사용하면 불행할 것 같아서...

트위터에 여러 가지.


감사합니다
메디님이 추천해주신 하수라 편해 보여요!다만, 이번 상황까지 고려하면 영입이 까다로울 수 있어 이번에는 mpyw의 아이디어를 참고해 DTO반을 만들려고 한다.
하수라의 새로운 프로젝트는 내부를 향한 관리 화면에 매우 유용한 것 같다!
https://hasura.io/

코드 샘플


PHP8.1로 써 보았다.
<?php

declare(strict_types=1);

namespace Package\SomeSpecificApplication\Common;

use Closure;
use stdClass;

class SomeQueryDto
{
    /**
     * @param stdClass $record
     */
    public function __construct(
        private readonly stdClass $record
    ) {
    }

    /**
     * データソースをもとに生成する
     * @param stdClass $record
     * @return SomeQueryDto
     */
    public static function createFromDataSource(
        stdClass $record
    ): SomeQueryDto {

        $specifications = self::validateDataSourceSpecifications();
        foreach ($specifications as $property => $closure) {
            assert(property_exists($record, $property));
            assert(is_callable($closure));
            assert($closure($record->{$property}));
        }

        return new self($record);
    }

    /**
     * @return Closure[]
     */
    private static function validateDataSourceSpecifications(): array
    {
        return [
            'item' => fn(mixed $value) => is_string($value) || is_null($value),
            'uuid' => fn(mixed $value) => is_string($value),
            'age' => fn(mixed $value) => is_int($value),
        ];
    }

    /**
     * @return string|null
     */
    public function getItem(): ?string
    {
        return $this->record->item;
    }

    /**
     * @return string
     */
    public function getUuid(): string
    {
        return $this->record->uuid;
    }

    /**
     * @return int
     */
    public function getAge(): int
    {
        return $this->record->age;
    }
}

생각했던 일.


DTO 내용을 검토하는 중입니다.stdClass에 저장된 속성과 유형을 보고 있습니다.
방법으로 검사하고자 하는 속성을 키로 설정하고 파행기를 사용하여 이에 대응하는 검사를 실시했다.

댓글 대기!


더 좋은 생각이 있으면 마음대로 댓글을 달아주세요!여러 가지 개선이 있었으면 좋겠다고 생각해요!

좋은 웹페이지 즐겨찾기