@magdalen_kub
В Yii2 для выборки данных из таблицы со связями можно использовать методы Active Record или Query Builder.
Например, если у вас есть две таблицы "post" и "category", и между ними связь "один ко многим", где один пост может принадлежать нескольким категориям, то для выборки всех постов и связанных с ними категорий можно использовать следующий код:
1 2 3 4 5 |
use appmodelsPost; $posts = Post::find() ->with('categories') ->all(); |
В данном примере метод with()
используется для указания, что нужно загрузить связанные данные из таблицы "category". Также можно использовать метод joinWith()
для выборки данных из связанных таблиц с помощью объединения (join).
Если у вас есть более сложные связи, например, "многие ко многим" или "один ко многим" через промежуточную таблицу, то можно использовать методы via()
и viaTable()
. Например:
1 2 3 4 5 6 |
use appmodelsPost; $posts = Post::find() ->joinWith('tags') ->where(['tags.name' => 'php']) ->all(); |
В данном примере мы выбираем все посты, связанные с тегом "php" через таблицу "post_tag", которая является промежуточной таблицей между таблицами "post" и "tag". Для этого мы используем метод joinWith()
, который загружает связанные данные из таблицы "tag", и метод where()
, который фильтрует посты по имени тега.
Также можно использовать методы hasOne()
, hasMany()
и belongsTo()
для указания типа связи и ее параметров, например:
1 2 3 4 5 6 7 |
use appmodelsPost; use appmodelsCategory; $category = Category::findOne(1); $posts = $category->getPosts() ->orderBy('created_at DESC') ->all(); |
В данном примере мы выбираем все посты, принадлежащие категории с id равным 1. Для этого мы используем метод getPosts()
, который возвращает объект запроса для выборки данных из таблицы "post", связанных с данной категорией через связь "один ко многим". Затем мы используем метод orderBy()
для сортировки результатов по дате создания поста.