Какие способы формирования запросов к БД в Yii2 лучше?
Если вам важна производительность и хороший код, то на все чтения делаем обычные SQL запросы или используем Query Builder от Yii2. 

ActiveRecord работает с объектами, поэтому он сильно «ударяет» по производительности при составлении больших и сложных запросов. Кроме того, в объектах AR не только сами данные, но и: поведения, события, валидация...

Если брать CRUD (Cread Read Update Delete), то для CUD (модификация данных) использовать ActiveRecord. А там где R (чтение) - используем SQL и QB. В таком случае вы будете работать с данными в виде массива, либо в виде простых DTO, на которые вы сами «маппите» данными из запроса. DTO будет удобно использовать для работы. $dto->name вместо  $items['name']. Хотя, если вы используете шаблонизатор twig, — Вам особо без разницы. Но на PHP объекты (DTO) вам ещё и удобно будет использовать в редакторе.

При таком подходе код будет чище, а производительность выше!
Если вам важна производительность и хороший код, то на все чтения делаем обычные SQL запросы или используем Query Builder от Yii2. 

ActiveRecord работает с объектами, поэтому он сильно «ударяет» по производительности при составлении больших и сложных запросов. Кроме того, в объектах AR не только сами данные, но и: поведения, события, валидация...

Если брать CRUD (Cread Read Update Delete), то для CUD (модификация данных) использовать ActiveRecord. А там где R (чтение) - используем SQL и QB. В таком случае вы будете работать с данными в виде массива, либо в виде простых DTO, на которые вы сами «маппите» данными из запроса. DTO будет удобно использовать для работы. $dto->name вместо  $items['name']. Хотя, если вы используете шаблонизатор twig, — Вам особо без разницы. Но на PHP объекты (DTO) вам ещё и удобно будет использовать в редакторе.

При таком подходе код будет чище, а производительность выше!