Как выбрать только строки, у которых есть связи?

В Yii Framework для выборки только тех строк, которые имеют связи с другими записями в базе данных, можно использовать методы связи моделей ActiveRecord.

Для начала необходимо определить связь между моделями с помощью метода hasOne() или hasMany() в классе модели. Например, если у нас есть таблица Posts и таблица Comments, и у каждого поста может быть несколько комментариев, то в модели Post мы опишем связь следующим образом:

public function getComments()
{
    return $this->hasMany(Comment::class, ['post_id' => 'id']);
}

После этого мы можем использовать метод with() при построении запроса, передавая ему имя связи, чтобы включить связанные записи в результаты:

$posts = Post::find()
    ->with('comments')
    ->all();

Теперь $posts будет содержать только те строки из таблицы Posts, у которых есть связи с таблицей Comments. Если же нужно выбрать только строки, у которых есть хотя бы одна связь, но не нужно включать связанные записи в результаты, можно использовать метод joinWith():

$posts = Post::find()
    ->joinWith('comments')
    ->all();

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

Таким образом, для выбора только строк существующих связей в Yii Framework можно воспользоваться методами связи моделей with() или joinWith().