Я работаю с Yii framework 2.0 и имею две таблицы базы данных (A и B). Это реляционная база данных 1: n. A имеет только один B, но B имеет множество A. Моя база данных похожа на эту.Yii Framework 2.0 Реляционная база данных Active Record
A table:
id = 1, name = yes
id = 2, name = no
id = 3, name = ok
id = 4, name = good
B table:
id = 1, a_id = 1
id = 2, a_id = 1
id = 3, a_id = 2
id = 4, a_id = 2
id = 5, a_id = 3
В моем контроллере я использую следующий код, чтобы получить все данные А и В:
$bModel = B::find()->all();
С моей точки зрения я использую следующий для-каждого, чтобы повторить все данные.
foreach($bModel as $b) {
echo $b->a->name . ' - ' $b->id. '<br>;
}
Результат:
yes - 1
yes - 2
no - 3
no - 4
Что я хочу:
yes - 1
2
no - 3
4
Я хочу объединить a_id и показать все идентификатор Б каждого присоединяемого A_ID. Я не хочу использовать обычный способ, прежде всего, получить все id, использовать for-each, чтобы зацикливать каждый идентификатор a, а затем запросить b один за другим по id. Как я могу подойти ко второму результату, как я хотел с Yii framework 2.0?
В случае, если есть идентификатор = 3 в таблице, но никакие a_id = 3 в таблице B, и я хочу, чтобы запросить только записи А, В имеет это a_id как иностранный ключ. Как я могу это сделать? –
Я думаю, что вы описываете Inner Join. В этом случае попробуйте изменить код в цикле foreach из 'A :: find() -> joinWith ('bs') -> all()' to 'A :: find() -> innerJoinWith ('bs') -> all() ' – Caleb
Он отлично работает. Спасибо за это. К сожалению, мне также нужно использовать виджет для разбивки на страницы. Поэтому я использовал последний код следующим образом: A :: find() -> innerJoinWith ('bs'); И мой код разбиения на страницы выглядит следующим образом: $ pagination = new Pagination ([ 'defaultPageSize' => 2, 'totalCount' => A-> count(), ]); $ allA = A-> offset ($ pagination-> offset) -> limit ($ pagination-> limit) -> all(); –