在 laravel eloquent 中使用反向 LIKE

Use inverse LIKE in laravel eloquent

大家好,这是我的第一个问题 基本上我想在 LARAVEL Eloquent SELECT * FROM `precio_canales` WHERE JHON SMITH PORKI' LIKE CONCAT('%',precio_canales.nombre_cliente,'%') 中实现这个 select 例如,如果我收到“JHON SMITH PORKI”作为输入,我希望数据库 return 查询所有名称为“JHON SMITH”的查询

我试过:

$precio_canal = DB::table('precio_canales')->where('Jhon Smith porki', 'LIKE', DB::raw(`CONCAT("%",precio_canales.nombre_cliente,"%"`))->get(); 还有:

$precio_canal = PrecioCanales::where('Jhon smith Porki ' , 'LIKE' , DB::raw('concat("%",nombre_cliente,"%")'))->get();

两个查询 return 500 内部服务器错误 任何帮助将不胜感激!提前致谢

你应该看看laravel eloquent docs

where方法中,第一个参数是列名,第二个是比较运算符(可选),thir 是比较值。

所以您的查询应该是:

$precio_canal = DB::table('precio_canales')
->where(DB::raw(`precio_canales.nombre_cliente`), 'LIKE', '%Jhon Smith porki%')
->get();

where 需要一个列。您需要在查询中传递原始表达式。

试试看

$precio_canal = DB::table('precio_canales')
    ->whereRaw('"Jhon Smith porki" LIKE CONCAT("%", precio_canales.nombre_cliente, "%")')
    ->get();

$precio_canal = DB::table('precio_canales')
    ->whereRaw('"Jhon Smith porki" LIKE "%" || precio_canales.nombre_cliente || "%"')
    ->get();

您还应该转义用户的输入。您可以通过将其替换为 ? 然后将数组中的值作为第二个参数传递来实现

$precio_canal = DB::table('precio_canales')
    ->whereRaw('"?" LIKE CONCAT("%", precio_canales.nombre_cliente, "%")', ['Jhon Smith porki'])
    ->get();

$precio_canal = DB::table('precio_canales')
    ->whereRaw('"?" LIKE "%" || precio_canales.nombre_cliente || "%"', ['Jhon Smith porki'])
    ->get();