You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Laravel模型访问器属性值执行whereRaw查询?

基于Laravel模型访问器结果实现查询的解决方案

你定义的status访问器是在PHP层面对数据库取出的数字值做转换,数据库里实际存储的还是0或1,所以直接用whereRaw("status like '%$search%'")是行不通的——数据库里的status是数字,根本匹配不上字符串搜索词。

下面给你两种可行的实现方案:

方案一:将搜索词映射为数据库存储的数值

根据搜索词判断对应的数据库状态值,直接查询原始字段:

$search = 'act';
$usersQuery = User::query();

$lowerSearch = strtolower($search);
if (str_contains($lowerSearch, 'act')) {
    // 匹配Active,对应数据库的1
    $usersQuery->where('status', 1);
} elseif (str_contains($lowerSearch, 'nonact')) {
    // 匹配Nonactive,对应数据库非1的值
    $usersQuery->where('status', '!=', 1);
}

$users = $usersQuery->get();

方案二:在SQL查询中直接转换状态值

用SQL的CASE语句在数据库层面完成状态值的转换,再做模糊匹配:

$search = 'act';
$users = User::whereRaw("
    CASE WHEN status = 1 THEN 'Active' ELSE 'Nonactive' END LIKE ?
", ["%{$search}%"])->get();

这里用参数绑定?代替直接拼接变量,既避免了SQL注入风险,又能正确匹配转换后的字符串。

内容的提问来源于stack exchange,提问作者Levind Sein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 05:43:10