XxxSearchModel.php

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

XxxSearchModel.php

Сообщение iamguruman »

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

        if($this->accountSearch){
            $query->andFilterWhere(['or',
                [
                    ['m_jps__bank.type_spfs' => 1],
                    ['or',
                        ['like', 'm_jps__bank.company_account', $this->accountSearch],
                        ['like', 'm_jps__bank.iban', $this->accountSearch],
                    ]
                ],
                [
                    ['m_jps__bank.type_swift' => 1],
                    ['or',
                        ['like', 'm_jps__bank.company_account', $this->accountSearch],
                    ]
                ]
            ]);
        }
суть такая...

если у записи в таблице type_spfs == 1, то ищу по двум полям: company_account и iban

если у записи в таблице type_swift == 1, то ищу по одному полю company_account

а как это записать?.. :shock:
Prooksius
Сообщения: 100
Зарегистрирован: 2019.01.17, 23:24

Re: XxxSearchModel.php

Сообщение Prooksius »

Может быть проще будет сделать две отдельные query, ищущие одна по одному полю с условием type_swift == 1, а вторая по двум с условием type_spfs == 1 и объединить результаты через union
mikola123
Сообщения: 42
Зарегистрирован: 2016.04.22, 22:39

Re: XxxSearchModel.php

Сообщение mikola123 »

Я уж два года не работал с yii. Но там есть возможность сформировать SQL запрос, после задания всех фильтров.
Типа
echo $query->getSql(), там насколько помню чуть сложнее, чем getSql(), поищи в интернете, что-то типа такого кажется:
$query->createSql();
echo $query->sql;

Соответственно будет чуть понятнее, как правильно расставить условия.

P/S Union использовать не надо. Его желательно вообще нигде не использовать.
Prooksius
Сообщения: 100
Зарегистрирован: 2019.01.17, 23:24

Re: XxxSearchModel.php

Сообщение Prooksius »

mikola123 писал(а): 2020.05.09, 19:01 ...там есть возможность сформировать SQL запрос, после задания всех фильтров.
Типа
echo $query->getSql(), там насколько помню чуть сложнее, чем getSql(), поищи в интернете, что-то типа такого кажется:
$query->createSql();
echo $query->sql;
Я пользуюсь встроенным построителем запросов: https://www.yiiframework.com/doc/guide/ ... ry-builder
Ну понятно, что его не всегда хватает, и иногда пишу sql прямо текстом.
mikola123 писал(а): 2020.05.09, 19:01 P/S Union использовать не надо. Его желательно вообще нигде не использовать.
Да, вероятно, вы правы.
mikola123
Сообщения: 42
Зарегистрирован: 2016.04.22, 22:39

Re: XxxSearchModel.php

Сообщение mikola123 »

Вообще запрос должен выглядеть примерно так. Судя по тому,какие нужны данные, а там уж смотрите сами, где нужно ставить AND или OR

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

->andWhere([
                'and', 
                ['m_jps__bank.type_spfs' => 1],
                ['and',
                    ['like', 'm_jps__bank.company_account', 123],
                    ['like', 'm_jps__bank.iban', 345],
                ]
            ])
            ->orWhere(['and', 
                ['m_jps__bank.type_swift' => 1],
                ['and',
                    ['like', 'm_jps__bank.company_account', 56],
                ]
            ])
unknownby
Сообщения: 750
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: XxxSearchModel.php

Сообщение unknownby »

iamguruman писал(а): 2020.05.08, 21:12 а как это записать?.. :shock:
По условию вроде всё сходится, но лишний OR прописан

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

if($this->accountSearch){
            $query->andFilterWhere(['or',
                [
                    ['m_jps__bank.type_spfs' => 1],
                    ['or',
                        ['like', 'm_jps__bank.company_account', $this->accountSearch],
                        ['like', 'm_jps__bank.iban', $this->accountSearch],
                    ]
                ],
                [
                    ['m_jps__bank.type_swift' => 1],
                    ['like', 'm_jps__bank.company_account', $this->accountSearch],
                ]
            ]);
        }
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Re: XxxSearchModel.php

Сообщение iamguruman »

решил таким способом:

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

$query->andWhere(['and',

                    ['m_jps__bank.type_spfs' => 1],
                    ['or',
                        ['like', 'm_jps__bank.company_account', $this->accountSearch],
                        ['like', 'm_jps__bank.iban', $this->accountSearch],
                    ]
            ])
            ->orWhere(['and',
                ['m_jps__bank.type_swift' => 1],
                ['like', 'm_jps__bank.company_account', $this->accountSearch],

            ])
            ;
очень удобный эктивквери оказывается... если лишних скобок не ставить :|
Ответить