В 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()
.