170 похожих чатов

Что-То невезуха какая-то, куда не ткнусь - не работает как

надо.

Вот, например, криво формирует sql запрос при поиске с tvd:
$res = SiteContent::query()
->withTvs(['product_vendor'])
->tvFilter('tvd:product_vendor:=:0')
->take(3)
->get();

Формирует
Unknown column 'ba_tvd_product_vendor.default_text' in 'where clause' (SQL: select `ba_site_content`.*, `ba_tv_product_vendor`.`value` as `product_vendor` from `ba_site_content` left join `ba_site_tmplvar_contentvalues` as `ba_tv_product_vendor` on `ba_site_content`.`id` = `ba_tv_product_vendor`.`contentid` and `ba_tv_product_vendor`.`tmplvarid` = 85 where IFNULL(`ba_tv_product_vendor`.`value`, `ba_tvd_product_vendor`.`default_text`) = and `ba_site_content`.`deleted` = 0 group by `ba_tv_product_vendor`.`value`, `ba_site_content`.`id` limit 3)

А надо
select `ba_site_content`.*, `ba_tv_product_vendor`.`value` as `product_vendor`
from `ba_site_content`
left join `ba_site_tmplvar_contentvalues` as `ba_tv_product_vendor` on `ba_site_content`.`id` = `ba_tv_product_vendor`.`contentid` and `ba_tv_product_vendor`.`tmplvarid` = 85
left join `ba_site_tmplvars` as `ba_tvd_product_vendor` on `ba_tvd_product_vendor`.`id` = 85
where IFNULL(`ba_tv_product_vendor`.`value`, `ba_tvd_product_vendor`.`default_text`) = 0 and `ba_site_content`.`deleted` = 0
group by `ba_tv_product_vendor`.`value`, `ba_site_content`.`id`
limit 3;

Разница:
1. нет ba_tvd_product_vendor
2. результат функции IFNULL сравнивается с ничем

Кто-то делал поиск с tvd, работает?

10 ответов

81 просмотр

Советую ознакомиться: evoSearch

В моем исходном варианте было product_vendor:d

Oleg-Nosov Автор вопроса
Aliaksandr Sadouski
В моем исходном варианте было product_vendor:d

а можно подробнее? не понял что куда

Oleg-Nosov Автор вопроса

Вот тут оказалось, что проблема в модели SiteContent. Берём код: $res = SiteContent::query() ->withTvs(['product_vendor']) ->tvFilter('tvd:product_vendor:=:0') ->take(3) ->get(); Значение tv-шки product_vendor по умолчанию 0. Ищем ресурсы, у которых эта tv-шка не заполнена. Запрос выглядит нормально, но не выдаёт ничего. Оказалось проблема в том, что значение в модели проверяется с помощью empty, а оно при сравнении с 0 даёт false. $parts = explode($innerSep, $filter, 5); $type = $parts[0]; $tvname = $parts[1]; $op = $parts[2]; $value = !empty($parts[3]) ? $parts[3] : ''; // !!! ВОТ ТУТ !!! $cast = !empty($parts[4]) ? $parts[4] : ''; Есть костыль, можно писать "0" вместо 0 и sql это нормально жрёт. А так конечно надо поправить модель, заменить empty на isset.

Oleg Nosov
Вот тут оказалось, что проблема в модели SiteConte...

Можно убрать совместимость с php5 и вообще сделать $value = $parts[3] ?? '';

Oleg-Nosov Автор вопроса
Dreamer_0x01 VeseloV
Можно убрать совместимость с php5 и вообще сделать...

Да, типа того. Ещё есть ?: (это Элвис). Я вчера/позавчера смотрел что для чего, но сейчас не помню разницу

Oleg Nosov
Да, типа того. Ещё есть ?: (это Элвис). Я вчера/по...

Элвис сравнивает с true-значением , вопросы - как раз isset.

Oleg Nosov
Вот тут оказалось, что проблема в модели SiteConte...

а проинформируй плз, что в итоге? ишу отправил? или как там дальше с этим?

Oleg-Nosov Автор вопроса

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта