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 ответов

52 просмотра

Советую ознакомиться: 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...

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

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

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

А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта