Yii2 как сделать запрос с условием существования связных данных?

Для выполнения запроса с условием существования связных данных в Yii2 можно использовать метод joinWith() вместе с методом andWhere(). Данный подход позволяет объединить таблицы и добавить условие, проверяющее наличие связанных данных.

Допустим, у нас есть две таблицы - User и Order, связанные через поле user_id. Нам необходимо выполнить запрос, который вернет только тех пользователей, у которых есть хотя бы один заказ. Для этого следует выполнить следующие шаги:

1. Необходимо создать модель для таблицы User. Для этого можно выполнить команду yii gii/model User. В результате будет создан файл модели User.php в директории models.

2. Внутри метода User в модели User.php необходимо объявить связь с таблицей Order. Например:

public function getOrder()
{
    return $this->hasMany(Order::className(), ['user_id' => 'id']);
}

3. В контроллере или в любом другом месте, где вы планируете использовать этот запрос, необходимо выполнить следующий код:

$users = User::find()
    ->joinWith('order')
    ->andWhere(['is not', 'order.id', null])
    ->all();

Метод joinWith() объединяет таблицы User и Order по связи, объявленной в модели User. В данном случае, используется связь order, объявленная в методе getOrder().

Метод andWhere() добавляет условие, проверяющее существование связанных данных. В данном случае, мы проверяем, что поле order.id не равно null.

Метод all() выполняет запрос и возвращает все найденные записи.

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

Надеюсь, что это объяснение помогло вам понять, как выполнить запрос с условием существования связных данных в Yii2. Если у вас возникнут еще вопросы, не стесняйтесь задавать их.