Laravel Eloquent 中的 SQL 查询子字符串
Posted
技术标签:
【中文标题】Laravel Eloquent 中的 SQL 查询子字符串【英文标题】:SQL query substring in Laravel Eloquent 【发布时间】:2022-01-17 06:38:49 【问题描述】:我无法在 Laravel 8 中正确获取 SQL 查询。我需要的是 name
列中的第一个字符,但只有 distinct
的第一个字符。我想使用这些字符作为词汇表描述的链接。
$chars = DB::table('parts')
->distinct()
->select('name')
->orderBy('name', 'asc')
->get();
我尝试将->select('name')
的行替换为->select(DB::raw('SUBSTRING(name, 0, 1)'))
行。但输出显然是错误的。我找到了一个完全像这样使用 SUBSTRING 的示例。我的查询有什么问题?
【问题讨论】:
【参考方案1】:SQL Server 和 mysql 中的子字符串使用从 1 开始的索引作为位置。你的第二个参数应该是 1,表示第一个字符。您的第三个参数应为 1,表示您只需要 1 个字符。
$chars = DB::table('parts')
->distinct()
->selectRaw('SUBSTRING(name, 1, 1) name_index')
->orderBy('name', 'asc')
->get();
【讨论】:
【参考方案2】:你应该像这样改变你的查询:
$chars = DB::table('parts')
->distinct()
->select(DB::raw('SUBSTRING(name, 0,2) char_name'))
->orderBy('char_name', 'asc')
->get();
【讨论】:
不幸的是,结果几乎相同["char_name":""]
更改它:SUBSTRING(name, 1, 1) as char_name
如果您仍然没有得到答案,请更改数字以上是关于Laravel Eloquent 中的 SQL 查询子字符串的主要内容,如果未能解决你的问题,请参考以下文章
PHP笔记-laravel框架中Eloquent ORM实现增删改查
用于原始 SQL 查询的等效 Laravel Eloquent