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

复杂的 SQL / Laravel Eloquent 查询

从 SQL 到 Laravel 8 Eloquent

Laravel 将 SQL 转换为 Eloquent:按 sum() 排序

Laravel 5 Eloquent:如何获取正在执行的原始 sql? (带有绑定数据)