Как правильно построить запрос в yii2, чтобы с каждой категории бралось по одной записи?

Чтобы построить запрос в Yii2, который будет извлекать по одной записи из каждой категории, вам потребуется использовать группировку и подзапросы.

Предположим, у вас есть модель "Category" с полем "id" и модель "Post" с полем "category_id", которое связано с полем "id" в модели "Category".

Вот как может выглядеть код для создания такого запроса:

use yiidbQuery;

$query = new Query();
$query->select('p.*')
    ->from('post p')
    ->innerJoin('(
        SELECT MIN(id) AS id
        FROM category c
        GROUP BY c.id
    ) c', 'p.category_id = c.id');

$posts = $query->all();

Этот код использует подзапрос, который выбирает минимальное значение "id" из каждой категории и группирует записи по "category_id".

Затем основной запрос выбирает все поля из таблицы "post" (обозначенной как "p") и объединяется с подзапросом по полю "category_id".

Результирующий набор данных будет содержать по одной записи из каждой категории.

Также учтите, что вам может понадобиться настроить связь между моделями "Category" и "Post" в соответствии с вашей таблицей базы данных, чтобы использовать их в коде выше.