@HellWalk

Какой из этих способов лучше для работы с бд?

Вникаю в работу с бд в Yii2, и встречая различные варианты в руководствах, сразу возник вопрос - а какой из этих способов лучше, и чем:

Вариант 1 (через модель)
$query = Country::find();

        $country = $query
            ->from('country')
            ->select(['name', 'population'])
            ->one();


Вариант 2
$country = (new Query())
            ->from('country')
            ->select(['name', 'population'])
            ->one();


Update: И еще третий вариант, который выглядит совсем хардкорно, но который встречается в руководствах:
$db = new yii\db\Connection(...);

$posts = $db->createCommand('SELECT * FROM post')
            ->queryAll();


Знакомый программист сказал, что лучше первый, но чем, не объяснил (сказал "всем")
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 3
qonand
@qonand
Software Engineer
Эти два способа дают немного разный результат - поэтому их сравнение немного корректно.
Первый вариант выполняет запрос и его результат преобразовывает в объект ActiveRecord, второй - возвращает результат в виде массива с данными. Какой из вариантов использовать зависит от проекта и его архитектуры.
Вывод - нужно работать с данными БД как с объектами - используйте первый вариант, нужно работать с данными как с массивом - второй
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
2-й быстрее
1- более гибкий
Я считаю, что использование framework - это скорость разработки и гибкость. Если обходить объекты ради экономии копеек, тогда зачем framework в принципе? Пишите на голом php без ООП. Если Вы точно знаете что в данном моменте AR не нужен - 2-й вариант разумен. Если Вы задаетесь вопросом в принципе - Вы занимаетесь ерундой.
Мой совет: при разработке использовать везде 1-й вариант, потом при оптимизации, где возможно заменить на 2-й (и если есть необходимость).
Ответ написан
Комментировать
@davidnum95
В первом варианте удобнее работать со связями.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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