В дополнение к существующим ответам вы также можете «переопределить» методы расширения, изменив сигнатуру метода:
1.) Используйте более конкретный тип
Это может быть только конечно, если целевой тип более конкретный, чем тип существующего метода расширения. Кроме того, это может потребоваться для всех применимых типов.
// "override" the default Linq method by using a more specific type
public static bool Any<TSource>(this List<TSource> source)
{
return Enumerable.Any(source);
}
// this will call YOUR extension method
new List<T>().Any();
2.) Добавить фиктивный параметр
Не так красиво. Кроме того, для этого потребуется изменить существующие вызовы, чтобы включить фиктивный аргумент.
// this will be called instead of the default Linq method when "override" is specified
public static bool Any<TSource>(this IEnumerable<TSource> source, bool @override = true)
{
return source.Any();
}
// this will call YOUR extension method
new List<T>().Any(true);
Я понял это. Мой синтаксис должен выглядеть следующим образом:
$users = User::whereRaw('lower(info_json->"$.full_name") like lower(?)', ["%{$user_name}%"])->where('user_type', '=', 'admin')->get();
Спасибо тем, кто помог с этим! Как и многие проблемы с синтаксисом / кодированием, небольшое перерывы в этом помогли мне разобраться с этим довольно быстро, когда я вернулся к нему.
Я думаю, что вы должны сделать что-то вроде
$users = User::where(DB::raw('lower(info_json->"$.full_name")', 'like', DB::raw('lower(%{$user_name}%)'))
->where('user_type', '=', 'admin')
Вероятно, у меня есть ошибка sintax, но основная идея - использовать DB::raw
, чтобы помочь вам с вашим запросом.