Есть ли смысл изучать, писать на ActiveRecord?

Начал изучать фреймворки.
первым взял Yii2 , подскажите плиз, есть ли вообще смысл в ActiveRecord... им реально кто-нибудь пользуется?
Сначала я подумал что это очень крутая штука, которая упрощает жизнь.
Но когда дошел до Join и сложных запросов, начинается какой-то ад(

Пока что еще студент, есть ли вообще смысл в этом AR , c точки зрения трудоустройства ?
  • Вопрос задан
  • 285 просмотров
Пригласить эксперта
Ответы на вопрос 6
romy4
@romy4
Exception handler
Это очень спорная штука. Можно использовать на простых запросах, но если дело идёт до нормальных выборок, то AR в сторону и только native sql.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
им реально кто-нибудь пользуется?


Больше чем нужно, скажем так. Как и любую модную технологию ее часто используют там где не надо и как не надо.

Просто стоит уяснить что вы не ограничены конкретными инструментами. Даже если у вас половина проекта использует AR, для сложных выборок можно обойтись и без него упростив себе жизнь.
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
Ну была бы моя воля я бы выкинул все конструкторы и писал бы на $connection->createCommand

Що занадто - то не здраво.

Писать нейтивный SQL имеет смысл там, где это востребовано.

Как по мне, 2 строчки native запроса читать удобней чем 10 строк конструктора.

Верно, только конструктором не так уж и часто пользуются. Вы тут про AR спрашивали, конструктор запросов - это совсем из другой оперы.
В том же Yii2 ваш SQL будет выглядеть так:
Product::find()->withCategories()->all();

Просто интересует момент, не будут ли бить по рукам за то что не использую AR?

Если не используете из принципа - будут. Если не используете там, где AR налагает слишком большие расходы - не будут.

первым взял Yii2 , подскажите плиз, есть ли вообще смысл в ActiveRecord... им реально кто-нибудь пользуется?

Пользуется, причем активно. Я бы правда рекомендовал Entity-Repository, вместо AR, но последний тоже имеет право на жизнь.
Ответ написан
Комментировать
bitver
@bitver
Вы путаете ActiveRecord с QueryBuilder. AR - это шаблон проектирования, реализующий доступ к данным.
Сложные запросы можно писать через чистый SQL и пользоваться AR, например из доков:
// returns all inactive customers
$sql = 'SELECT * FROM customer WHERE status=:status';
$customers = Customer::findBySql($sql, [':status' => Customer::STATUS_INACTIVE])->all();

P.S. JOIN-ы очень удобно формируются через зависимости (Relations), в последствии чего доступ к данным (привет AR) выполняется вполне логичным способом со стороны ООП когда происходит обращение к сущности как к объекту. Отсюда и у зависимого объекта появляется возможность вызвать его методы, что очень удобно во всех смыслах.
Ответ написан
Комментировать
@enot_enotov Автор вопроса
Ну была бы моя воля я бы выкинул все конструкторы и писал бы на $connection->createCommand
Просто интересуюсь вопросов с точки зрения последующего собеседования и работы в команде, как джуниор
Как по мне, 2 строчки native запроса читать удобней чем 10 строк конструктора.

Просто интересует момент, не будут ли бить по рукам за то что не использую AR?
Вот таких запросах:
select * from products
LEFT JOIN products_categories ON products.id = products_categories.id_products
LEFT JOIN categories ON products_categories.id_categories = categories.id
Считается ли это сложным запросом?
Просто такое я напишу за 10 секунд, а на AR такое конструировать в 10 раз дальше.
Ответ написан
VladimirAndreev
@VladimirAndreev
php web dev
AR убыстряет разработку.
например, есть у тебя сложная система, ну, пусть будет продажа машин, в которой сайт, апи для мобильных платформ, еще какие-нибудь хрени.

Ты их (машины) выбираешь в десятках мест.

А потом к тебе приходит задача: добавить машинам флаг "спам" и все помеченное этим флагом игнорировать во всех-всех-всех запросах на выборку.

На нативе ты в десятках мест будешь это условие добавлять.
в AR ты поправишь одно место...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы