插件窝 干货文章 Bangla 部分模型检索中的 Laravel Eloquent ORM)

Bangla 部分模型检索中的 Laravel Eloquent ORM)

BanglaModel Bengali where 查询 826    来源:    2025-03-28

Laravel Eloquent ORM 在 Bengali 模型检索中的应用

基本 Bengali 数据检索

在 Laravel 中使用 Eloquent ORM 检索 Bengali 数据的基本方法:

// 获取所有 Bengali 记录
$banglaRecords = BanglaModel::all();

// 获取第一条记录
$firstBangla = BanglaModel::first();

// 按 ID 查找
$banglaById = BanglaModel::find(1);

条件查询

// 简单条件查询
$records = BanglaModel::where('title', 'বাংলা শিরোনাম')->get();

// 多条件查询
$records = BanglaModel::where('language', 'bn')
            ->where('status', 'published')
            ->get();

Bengali 文本搜索

// 基本 LIKE 搜索
$results = BanglaModel::where('content', 'LIKE', '%বাংলা%')->get();

// 全文搜索 (需配置)
$results = BanglaModel::whereFullText('content', 'বাংলা ভাষা')->get();

排序 Bengali 数据

// 按 Bengali 字段排序
$sorted = BanglaModel::orderBy('title_bn', 'asc')->get();

// 复杂排序
$sorted = BanglaModel::orderByRaw("CONVERT(title_bn USING utf8mb4) COLLATE utf8mb4_unicode_ci ASC")->get();

分页 Bengali 数据

// 简单分页
$paginated = BanglaModel::paginate(15);

// 带 Bengali 查询的分页
$paginated = BanglaModel::where('language', 'bn')
               ->orderBy('created_at', 'desc')
               ->paginate(20);

处理 Bengali 字符集问题

// 确保数据库连接使用正确的字符集
// 在 config/database.php 中配置:
'mysql' => [
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
],

// 查询时指定字符集
DB::statement('SET NAMES utf8mb4');

高级 Bengali 文本处理

// 使用 SCOUT 进行 Bengali 全文搜索 (需安装 scout 和相应驱动)
$results = BanglaModel::search('বাংলা')->get();

// 使用 Bengali 正则表达式
$matches = BanglaModel::where('content', 'REGEXP', '[ব-হ]+')->get();

关系查询

// 假设有 Author 和 BanglaPost 模型
class Author extends Model {
    public function banglaPosts() {
        return $this->hasMany(BanglaPost::class);
    }
}

// 检索某作者的所有 Bengali 文章
$author = Author::find(1);
$banglaPosts = $author->banglaPosts()->where('language', 'bn')->get();

性能优化

// 使用 eager loading 减少查询
$banglaWithAuthor = BanglaModel::with('author')
                      ->where('language', 'bn')
                      ->get();

// 只选择需要的字段
$lightweight = BanglaModel::select('id', 'title_bn', 'excerpt_bn')
                 ->where('language', 'bn')
                 ->get();

注意事项

  1. 确保数据库、表和字段都使用 utf8mb4 字符集
  2. Bengali 文本排序可能需要特定的 collation
  3. 复杂的 Bengali 文本处理可能需要扩展包或自定义实现
  4. 搜索功能可能需要特定的 Bengali 分词器

以上方法应该能覆盖大多数 Bengali 数据检索场景。根据具体需求,可能需要进一步调整或扩展这些查询。