Aliaksandr
Andrey
Ну думал методами коллекции можно как-то хитро
Aliaksandr
Можно еще такие теги через мультикатегории в постах прикреплять
Aliaksandr
А, моделями
Andrey
Вроде виде мельком, что у where там какой-то коллбэк, что ли, где можно самому проверять. Или ошибаюсь и это не то пальто.
Aliaksandr
Это обычно через промежуточную таблицу и pivot наверно делается. Аналог tagSaver
Andrey
Лень
Aliaksandr
А так то и в where('tag', 'like', value) можно отбирать
Andrey
Ну он 2 и 22 лайкнет
Andrey
Разве что ограничить через %
Aliaksandr
С поиском like %,tag,%
Aliaksandr
Concat(',',tag,',')
Aliaksandr
@Serg_64j проверял, вроде concat не сильно тормозит сам лайк
Andrey
Экая содомия. Ну это в последнюю попытку. Вдруг чего чудесного ещё найдется.
Aliaksandr
Норм содомия, либо regexp по окончаниям слов либо лайк с конкатом, чтобы брало только точное совпадение, т е в строке ,2,22,222, при поиске по ,2, только 2 и отдавало
Aliaksandr
Ну или по нормальному через промежуточную таблицу и pivot - но ты так не хочешь 😅
Andrey
Я не очень понимаю как в случае нормальной связи через таблицу связывать это уже с ресурсами.
Aliaksandr
Он проверял в том смысле, что обычный лайк и лайк с этим concat по времени один хрен, за счет concat не тормозит, но ищет точно
Aliaksandr
Есть таблица posts, есть таблица tags и есть таблица posts_tags в которой 2 колонки post_id и tag_id . Дальше eloquent сам разберется как связать :)
Aliaksandr
Наверно
Andrey
Вот...
Andrey
В ларе я бы у модели тега указал связь и просто потом бы Tag::posts()
Andrey
А тут то как
Aliaksandr
Так унаследуй sitecontent в свою модель и укажи все что хочешь
Aliaksandr
Будет MySiteContent как была DLSiteContent ))
Andrey
Так а разве не для всех ресурсов одна общая модель?
Aliaksandr
Так ты ее будешь использовать для своих целей где надо, а где не надо - обычную.
Aliaksandr
Надо выборка постов с тегами, делаеш SiteContenPost:: where и погнал. Надо другое - делаешь просто SiteContent::where и всё
Andrey
А ведь верно.
Andrey
Блин. Я было размечтался, что ты щас скажешь, что модель тоже как контроллер, по имени шаблона создаётся)
Aliaksandr
https://github.com/webber12/DLSiteContent/blob/master/DLSiteContent.php#L242
Aliaksandr
Вот я приделывали аналог tagsData из доклистера контроллера site_tags
Aliaksandr
Может это и в основную завезли, проверь по коду
Andrey
Обязательно гляну, спасибо.
Aliaksandr
Там в ридми в предпоследней строчке как раз пример как это работает
Aliaksandr
синтаксис доклистера tagsData=id_tv:val,val,val
Andrey
site_content_tags то откуда?
Alexander
Приятно читать людей которые развиваются, а не вот это вот все...
Oleg
Еще приятнее понимать о чем они там ..
Alexander
😂это пока нихуя
Andrey
У поста есть ТВ, там написано 20,12.
Это айди других ресурсов. Которые теги.
Открываю тег, хочу посты.
Andrey
Но не как обычно, а в развиваца-стайл.
Andrey
Хуита хует, но, по сути, в контроллере то же самое.
$docid = $this->evo->documentObject['id'];
$this->data['posts'] = SiteContent::
withTVs(['mainphoto','category','tags'])
->where('published', 1)
->where(function ($query) use ($docid) {
$query->where('tv_tags.value', 'LIKE', '%'. $docid)
->orWhere('tv_tags.value', 'LIKE', $docid . '%')
->orWhere('tv_tags.value', 'LIKE', '%' .$docid .'%');
})
->orderBy('createdon', 'desc')
->paginate(10)
;
Aliaksandr
Хуита хует, но, по сути, в контроллере то же самое.
$docid = $this->evo->documentObject['id'];
$this->data['posts'] = SiteContent::
withTVs(['mainphoto','category','tags'])
->where('published', 1)
->where(function ($query) use ($docid) {
$query->where('tv_tags.value', 'LIKE', '%'. $docid)
->orWhere('tv_tags.value', 'LIKE', $docid . '%')
->orWhere('tv_tags.value', 'LIKE', '%' .$docid .'%');
})
->orderBy('createdon', 'desc')
->paginate(10)
;
Так он будет искать неправильно
Aliaksandr
whereRaw(CONCAT('', tv_tags.value, '') like '%'.$docid.'%') и должен заменить огород из трех orWhere и правильно отбирать значения
Andrey
Ещё равно добавил, запятые и т.п. тестю
Aliaksandr
Телега сожрала код 😅😅
Andrey
Ы
Aliaksandr
Думает, что я ее ломаю элоквентом
Aliaksandr
)))
Aliaksandr
Jacov
По клику открывает же
Aliaksandr
Там все равно не хватает символов, если открыть )
Aliaksandr
Сравни с тем, что на скрине )
Jacov
Эвона как...
Jacov
Накрутили)))
Andrey
->whereRaw("FIND_IN_SET($docid,evo_tv_tags.value)")
Andrey
А ведь норм. Подводных вроде нет?
Aliaksandr
Если разделитель запятая, то норм. Только она вроде медленная
Aliaksandr
В общем надо пробовать. Ну тли если там пара сотен доков - можно и не пробовать - на таких размерах пофиг
Andrey
3-5 к
Andrey
230мс на всю страницу запросы
Pathologic
зачем пробовать всякую херню, если можно нормально решить
Aliaksandr
норм, быстрее лайка
Aliaksandr
Aliaksandr
Aliaksandr
Andrey
Aliaksandr
записей в районе 5М
Aliaksandr
Pathologic
https://github.com/spatie/laravel-tags
Andrey
Так в трёшке, не в ларе
Aliaksandr
https://github.com/spatie/laravel-tags/blob/main/src/Tag.php#L44
Aliaksandr
решения ларавеля они конечно сделаны богами для богов ))))
Aliaksandr
в обход всяких там запросов к базе данных
Andrey
Ну вот эти парни дофига всего кстати выпустили.
Aliaksandr
угу, с whereRow ... like )))