Как упрощают люди модель?

22 ответов

66 просмотров

У меня сейчас на основной работе куча реп-помоек под каждую модель, но сколько я ни спрашивал за эту тему, все в голос говорят что они нахрен не нужны

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜- Автор вопроса
Даниил Вершинин
У меня сейчас на основной работе куча реп-помоек п...

ну я много раз слышал что репозитории излишни, по факту так и есть это просто класс куда ты выбрасываешь методы модели и юзаешь их в модели потом, но мне нравится в плане того что модель чище выглядит

Даниил Вершинин
У меня сейчас на основной работе куча реп-помоек п...

Так конечно, особенно если работаешь с моделями Eloquent, в результате нарушаешь сам паттерн... У тебя нет возможности подменить реализацию репозитория другим, например вынести пользователей из БД, в API. Потому что по коду, учитывая Eloquent, скорее всего где-то встречается User::find, не говоря про штатные менеджеры типо AuthManager'а, который вообще на прямую работает с моделью, и врядли его кто-то переписывал на работу с репозиторием 🙂

Vladimir 
Так конечно, особенно если работаешь с моделями El...

Ну согласись, что в котексте модели, как сущности эти методы не имеют никакого отношения

Даниил Вершинин
screenshot Ну согласись, что в котексте модели, как сущности ...

Это другой вопрос) я говорил про то, почему репы не нужны в ларавель при такой работе. В крайнем случае спокойно Query модели подойдут. Чтобы упаковать скоупы, если их прям тьма, при этом сохранить контекст модели.

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜
что за query модели? в доке есть?

Вот же пример - https://t.me/octobercms_rus/256934

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜- Автор вопроса
Vladimir 
Вот же пример - https://t.me/octobercms_rus/256934

а почему Query наследует модель а не на оборот? как тогда сторить запрос

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜
а почему Query наследует модель а не на оборот? ка...

Потому что это модель для запросов. Якикз которую ты делаешь запросы, но получаешь наследника модели. Что соответсвует возможностям декларирования и консистенции методов модели.

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜- Автор вопроса
Vladimir 
Потому что это модель для запросов. Якикз которую ...

не понял( можешь пожалуйста доку дать или пример использования вот я вынес к примеру класс UsersQuery { public function scopeActive() {} } и я могу все также использовать в запросе $user->active()

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜
не понял( можешь пожалуйста доку дать или пример и...

App/Models/User - модель пользователя App/Models/Queries/UserQuery - модель наследник для запросов App/Models/User: class User extends Model { ... public function isActive(): bool { return $this->is_activated === true; } .... } App/Models/Queries/UserQuery: use App/Models/User as UserModel; class UserQuery extends UserModel { protected function scopeActive(Builder $query): void { $query->where('is_activated', true); } } Использование: class Example { public function getFirstUser(): User // see declare to User model. { return UserQuery::active()->first(); } } .... $example = new Example; var_dump($example->getFirstUser()); // UserQuery object var_dump($example->getFirstUser()->isActive()); // true, method from User Model.

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜- Автор вопроса
Vladimir 
App/Models/User - модель пользователя App/Models/Q...

а, так это мне не поможет выходит, мне весь код лопатить и заменять использование модели на Query

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜
а, так это мне не поможет выходит, мне весь код ло...

Можешь плавно съезжать, выводя старые методы в @deprecated, чтобы IDE подсвечивала, что этот метод больше не стоит использовать.

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜
а, так это мне не поможет выходит, мне весь код ло...

Та репа именно так и пишется - это не абстракция НАД моделью, это просто слой работы с БД

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜- Автор вопроса
Даниил Вершинин
Та репа именно так и пишется - это не абстракция Н...

пфф, я запутался, у меня модель я хочу скопы из неё куда-то деть, методы большие, думал в репозиторий, но как правильно разрешить зависимости репозитория, я не особо знаю,достаточно ли того что я сделал, но мне не очень нравится создание обьекта в конструкторе🤔

Даниил Вершинин
Тогда, юзай код который Вова предлагает)

Он более каноничен :D, да и старые методы можно задепрекейтить. Но надо приучить себя для запросов всегда использовать Query модель 🙂

Даниил Вершинин
Тогда, юзай код который Вова предлагает)

Хотя нет, главное правило - всегда юзай код, который Владимир предлагает)

⇝𝓓𝓪𝓷𝓲𝓲𝓵⇜- Автор вопроса
Даниил Вершинин
Тогда, юзай код который Вова предлагает)

а если у меня этот скоп используется вот так: self::query()->with($with)->bySlug($slug) где self - ItemModel, и также есть скопы, которые отвечают за фильтры в админ панели, ого как все запутано тут в октябре)

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта