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

Laravel/Eloquent:如何筛选以字母B开头的字符串列表?

解决Laravel中筛选以'B'开头字符串的问题

嘿,我来帮你搞定这个筛选问题!先看看你之前尝试的两种方法为啥没生效:

你的两种尝试的问题分析

  • 第一种用$kentekens->where('kenteken', 'LIKE', 'B%'):这里要注意,Eloquent集合的where方法和查询构造器的where不一样,集合的where是严格匹配值,不支持SQL的LIKE语法,所以这个写法在集合里行不通。
  • 第二种用filter的写法:问题出在$value是整个Kenteken模型实例,不是kenteken字段的值,你直接用strpos($value, 'B')其实是在检查模型对象本身,而不是字段内容,自然得不到正确结果。

两种正确的解决方案

方案1:在控制器层面直接数据库查询(推荐)

这种方式最高效,因为在数据库层面就完成筛选,避免把所有数据拉到内存再处理,尤其数据量大的时候优势明显。修改你的控制器代码,在查询构造器里直接加where条件:

public function create() {
    $kentekens = Kenteken::latest()
        ->where('created_at', '>=', Carbon::today())
        ->where('kenteken', 'LIKE', 'B%') // 新增这行筛选条件
        ->get();
    return view('layouts.dashboard', compact('kentekens'));
}

这样传到视图的$kentekens已经是筛选好的结果,直接用就行。

方案2:在视图里用集合筛选(适合必须在视图处理的场景)

如果因为某些原因要在视图里处理集合,修正filter的回调,访问模型的kenteken字段:

{{ $kentekens->filter(function ($item) {
    return strpos($item->kenteken, 'B') === 0;
}) }}

如果你的PHP版本是7.4及以上,还可以用更简洁的箭头函数:

{{ $kentekens->filter(fn($item) => strpos($item->kenteken, 'B') === 0) }}

内容的提问来源于stack exchange,提问作者Jessey Fransen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:23