ActiveRecord и LEFT JOIN, как связывать данные ?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Cepairda
Сообщения: 17
Зарегистрирован: 2017.06.27, 17:51

ActiveRecord и LEFT JOIN, как связывать данные ?

Сообщение Cepairda »

Есть такой вот запрос у меня,

Код: Выделить всё

$products = $query->where(['category.id' => $id])
            ->joinWith('products')
            ->asArray()
            ->offset($pages->offset)
            ->limit($pages->limit)
            ->all();
Если в отладчике глянуть запрос, то он такой, то есть данные выбираются только из первой связываемой таблицы.

Код: Выделить всё

SELECT `category`.*, FROM `category` LEFT JOIN `category_product` ON `category`.`id` = `category_product`.`category_id` LEFT JOIN `product` ON `category_product`.`product_id` = `product`.`id` WHERE `category`.`id`='8'
Как получить что-то типа ?

Код: Выделить всё

SELECT `category`.*, `product`.*  FROM `category` LEFT JOIN `category_product` ON `category`.`id` = `category_product`.`category_id` LEFT JOIN `product` ON `category_product`.`product_id` = `product`.`id` WHERE `category`.`id`='8'

Сейчас результат выглядит вот так

Код: Выделить всё

Array
(
    [0] => Array
        (
            [id] => 8
            [name] => Фантастика
            [products] => Array
                (
                    [0] => Array
                        (
                            [id] => 7
                            [provider_id] => 2
                            [name] => Тёмная башня
                            [price] => 3
                            [img] => 7.jpg
                        )

                    [1] => Array
                        (
                            [id] => 13
                            [provider_id] => 3
                            [name] => Бегущий по лезвию 2049 (2017)
                            [price] => 20
                            [img] => 13.jpg
                        )

                    [2] => Array
                        (
                            [id] => 15
                            [provider_id] => 3
                            [name] => Кинг Конг: Остров черепа
                            [price] => 16
                            [img] => 15.jpg
                        )

                    [3] => Array
                        (
                            [id] => 17
                            [provider_id] => 3
                            [name] => Я - легенда
                            [price] => 15
                            [img] => 17.jpg
                        )

                )

        )

)
А нужно обьединение

Код: Выделить всё

Array
(
                    [0] => Array
                        (
                            [id] => 7
                            [provider_id] => 2
                            [name] => Тёмная башня
                            [price] => 3
                            [img] => 7.jpg
                            [category_id] => 8
            		    [name] => Фантастика
                        )

                    [1] => Array
                        (
                            [id] => 13
                            [provider_id] => 3
                            [name] => Бегущий по лезвию 2049 (2017)
                            [price] => 20
                            [img] => 13.jpg
                            [category_id] => 8
            		    [name] => Фантастика
                        )

                    [2] => Array
                        (
                            [id] => 15
                            [provider_id] => 3
                            [name] => Кинг Конг: Остров черепа
                            [price] => 16
                            [img] => 15.jpg
                            [category_id] => 8
            		    [name] => Фантастика
                        )

                    [3] => Array
                        (
                            [id] => 17
                            [provider_id] => 3
                            [name] => Я - легенда
                            [price] => 15
                            [img] => 17.jpg
                            [category_id] => 8
            		    [name] => Фантастика
                        )
)
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: ActiveRecord и LEFT JOIN, как связывать данные ?

Сообщение Nex-Otaku »

Для этого используйте на ActiveQuery, а обычный Query и связывайте как угодно.
Только не понимаю, зачем - что мешает использовать тот вид, который вернулся в первом запросе? Чем он неудобен?
Аватара пользователя
vitaxa_prog
Сообщения: 306
Зарегистрирован: 2011.06.06, 22:44
Откуда: Волноваха

Re: ActiveRecord и LEFT JOIN, как связывать данные ?

Сообщение vitaxa_prog »

Ну так и делайте

Код: Выделить всё

FROM `product`
и объединяйте с таблицей category
В принципе ничего нет невозможного.
— Вы думаете?
— Для человека. С интеллектом.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: ActiveRecord и LEFT JOIN, как связывать данные ?

Сообщение caHek2x »

$products = $query->where(['category.id' => $id])
->joinWith('products')
->asArray()
->offset($pages->offset)
->limit($pages->limit)
->all();
а что мешает написать ->select(...) ?

а чтоб убрать вложенный
[products] => Array
(
[0] => Array
(
->joinWith('products', false)
Ответить