$rel->where(function ($q) use ($newsUser) {
$q->orWhereRaw('concat(",", word_tree.job_id, ",") like "%,0,%"');
$q->orWhereRaw('concat(",", word_tree.job_id, ",") like "%,' . $newsUser->id_job . ',%"');
})->orWhere(function ($q) use ($roles) {
foreach ($roles as $role) {
$q->orWhereRaw('concat(",", role_id, ",") like "%,' . $role . ',%"');
}
})->orWhere('office_ids', 128);
//->orWhereRaw('concat(",", word_tree.office_ids, ",") like "%,' . $newsUser->id_office . ',%"')
});
последняя строчка это моё условие там надо если не совпали первые 2 то выбрать третее оно не работает ...и как это может быть конкат внутри условия? почему это должно работатьт? там строчкой айдишники перечислены..их берём и в массив конкатим типа..это не я придумал это было так
Ну так сделай toSql и посмотри где не пошло
И почему нужно дальше говнокодить с конкатом, а не сделать нормально?
вот в этом вопрос как правильно сделать чтоб выбиралось и конкатилось)))
whereIn там не подходит?
$query->where(function ($rel) use ($newsUser, $roles) { $rel->where(function ($q) use ($newsUser) { $q->orWhereRaw('concat(",", word_tree.office_ids, ",") like "%,' . $newsUser->id_office . ',%"'); })->orWhere(function ($q) use ($roles) { foreach ($roles as $role) { $q->orWhereRaw('concat(",", role_id, ",") like "%,' . $role . ',%"'); } })->orWhere(function ($q) use ($newsUser) { $q->orWhereRaw('concat(",", word_tree.job_id, ",") like "%,0,%"'); $q->orWhereRaw('concat(",", word_tree.job_id, ",") like "%,' . $newsUser->id_job . ',%"'); }); }); вот хотел спросить а почему он не останавливается на первом условии? и выбирает дальше там же or where тип одно из
У тебя идет 3 условия: 1) $rel->where(function ($q) use ($newsUser) { $q->orWhereRaw('concat(",", word_tree.office_ids, ",") like "%,' . $newsUser->id_office . ',%"'); }) 2) если не прошел 1ое, то срабатывает 2ое: ->orWhere(function ($q) use ($roles) { foreach ($roles as $role) { $q->orWhereRaw('concat(",", role_id, ",") like "%,' . $role . ',%"'); } }) 3) если не прошло 2ое, то срабатывает 3е: ->orWhere(function ($q) use ($newsUser) { $q->orWhereRaw('concat(",", word_tree.job_id, ",") like "%,0,%"'); $q->orWhereRaw('concat(",", word_tree.job_id, ",") like "%,' . $newsUser->id_job . ',%"'); });
Всмысле если нет то дальше?) Оно ж всегда все будет отрабатывать ибо там or🌚
Ну а зачем ему проверять по OR, если на 1ом вернуло TRUE
Вот значит надо и переписать
Обсуждают сегодня