db icon indicating copy to clipboard operation
db copied to clipboard

Enum cases support for build query

Open lynicidn opened this issue 1 year ago • 2 comments

What steps will reproduce the problem?

$query->andWhere(['category_name' => CategoryEnum::blablacat])

What is the expected result?

Am want suggest add logic to query for transformate enum case object to case->value

$query->andWhere(['category_name' => CategoryEnum::blablacat->value])

What do you get instead?

this suggestion

Additional info

Q A
Version 3.x?
PHP version 8.x+
Operating system any

lynicidn avatar Oct 11 '24 06:10 lynicidn

к ознакомлению https://php.watch/versions/8.1/enums

я тут узнал, что можно оказывается методы засовывать в енум, и так же не запрещено вешать интерфейсы и метод __toString не запрещен в енумах, в связи с новыми входными данными, возможно рассмотреть превращение не UnitCase в $unit->value, а просто сделать поддержку всех Stringable интерфейсов, тогда неудобство с енум уйдет в какой то трейт

enum HTTPStatus: int {
    case OK = 200;
    case ACCESS_DENIED = 403;
    case NOT_FOUND = 404;

    public function label(): string {
        return static::getLabel($this);
    }

    public static function getLabel(self $value): string {
        return match ($value) {
            HTTPStatus::OK => 'OK',
            HTTPStatus::ACCESS_DENIED => 'Access Denied',
            HTTPStatus::NOT_FOUND => 'Page Not Found',
        };
    }
}

echo HTTPStatus::ACCESS_DENIED->label(); // "Access Denied"
echo HTTPStatus::getLabel(HTTPStatus::ACCESS_DENIED); // "Access Denied"

lynicidn avatar Oct 11 '24 10:10 lynicidn

Need to add BackedEnum support. Integer/string enums implements this interface.

vjik avatar Oct 11 '24 10:10 vjik