join и where

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

Re: join и where

Сообщение zelenin » 2014.11.20, 12:32

Shappy писал(а):Сейчас только внимательно посмотрел... Попробуйте из вашего запроса второго вместо такого:

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

$m = Post::find()
    ->joinWith('user')
    ->where('user_user.id >= blog_post.id')
    ->where(['>=', 'user_user.id', 'blog_post.id'])
    ->one(); 
Оставить только один where, т.е. такой:

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

$m = Post::find()
    ->joinWith('user')
    ->where(['>=', 'user_user.id', 'blog_post.id'])
    ->one(); 
Выдача та же будет? Ну и там нужен new Expression все же, т.е. такой:

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

$m = Post::find()
    ->joinWith('user')
    ->where(['>=', 'user_user.id', new Expression('blog_post.id')])
    ->one();
 
ой, это опечатка была, я через ctrl+z возвращал старый код, чтобы скопировать сюда, и чуть переборщил. там конечно же один where был 100%.

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: join и where

Сообщение zelenin » 2014.11.20, 12:34

Shappy писал(а):Я перепроверил, для достоверности чуть поправил запросы...

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

BidBanner::find()
            ->joinWith('user')
            ->where('`users`.`wallet` >= bid_banners.bid')
            ->where(['>=', '`users`.`wallet`', new Expression('bid_banners.bid')])
            ->one()
 

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

BidBanner::find()
            ->joinWith('user')
            ->where(['>=', '`users`.`wallet`', new Expression('bid_banners.bid')])
            ->where('`users`.`wallet` >= bid_banners.bid')
            ->one()
 
Эти два запроса теперь вообще генерирую одинаковый sql:

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

SELECT `bid_banners`.* FROM `bid_banners` LEFT JOIN `users` ON `bid_banners`.`user_id` = `users`.`id` WHERE `users`.`wallet` >= bid_banners.bid
я смотрю в дебаг-баре, сам sql не пишу;)
И точно выдача у меня разная... При первом запросе если вывести вардампом содержание у меня
["bid"]=>
string(5) "500.0"
...
["user"]=>
["wallet"]=>
string(5) "300.0"

При втором запросе у меня:
["bid"]=>
string(5) "555.0"
...
["user"]=>
["wallet"]=>
string(6) "1000.0"
других то запросов debug нету? это все сказки.

Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: join и where

Сообщение Shappy » 2014.11.20, 12:42

Ладно, тогда предлагаю забить... Это не критично в любом случае... Спасибо за уделенное время.
П.С. касательно других запросов, они есть, но они не касаются этих данных, ну кроме того что выполняет with для присоединения users.

lynicidn
Сообщения: 2221
Зарегистрирован: 2014.05.24, 15:12

Re: join и where

Сообщение lynicidn » 2014.11.21, 01:43

юзайте andWhere

lynicidn
Сообщения: 2221
Зарегистрирован: 2014.05.24, 15:12

Re: join и where

Сообщение lynicidn » 2014.11.21, 01:43

и попробуйте задать алиас для таблиц в ручную

Ответить