Laravel Eloquent;使用 LIKE 搜索显示最近的记录
Laravel Eloquent; Show the most recent record with LIKE search
我正在构建一个报告系统,我每天都会将一堆文件导入到我的数据库中。遇到的问题是我的数据库中可能有重复但有效的记录。
在我的数据库中,我会有以下示例数据集。
ID NAME MATERIAL PRICE CREATED_AT
1 Foo FP1234 3.45 2016-01-01 15:00:00
2 Bar FP8177 7.21 2016-01-01 15:00:00
3 Foo FP1234 4.87 2016-01-02 15:00:00
4 Baz FP1231 3.00 2016-01-02 15:00:00
我想知道如何return上面的结果集,但是排除row 1
因为它和[=14=一样],row 3
是最近的。添加到我的推理中,row 1
和 3
是相同的,但是由于 row 3
具有更新的 created_at
时间戳,我只想看到这个。
棘手的是我需要能够在此基础上进行分页,而我希望避免使用 Laravel 的 Collection 方法 forPage
。
我的问题是
我可以使用 Laravel orderBy 和 groupBy if 运行 使用相等的操作数进行搜索,但是我还需要考虑 like .
您可以使用子查询来获取有序数据集以执行其他功能。
一个解决方案(我不知道你的表名,或者你传入的 LIKE 变量($queryTerm)是什么):
DB::table('tableName')->whereIn('tableName.id', function($subquery) {
$subquery->select('tableName.id')
->from('tableName')
->orderBy('created_at','DESC');
})
->where('tableName.column', 'LIKE', '%' .$queryTerm. '%')
->where('tableName.column', '=', $anotherQueryTerm)
->groupBy('tableName.MATERIAL')
->get();
与 Eloquent 完全相同,因为 Eloquent 使用下面的查询生成器来创建数据库查询:
SomeModel::whereIn('tableName.id', function($subquery) {
$subquery->select('tableName.id')
->from('tableName')
->orderBy('created_at','DESC');
})
->where('tableName.column', 'LIKE', '%' .$queryTerm. '%')
->where('tableName.column', '=', $anotherQueryTerm)
->groupBy('tableName.MATERIAL')
->get();
我正在构建一个报告系统,我每天都会将一堆文件导入到我的数据库中。遇到的问题是我的数据库中可能有重复但有效的记录。
在我的数据库中,我会有以下示例数据集。
ID NAME MATERIAL PRICE CREATED_AT
1 Foo FP1234 3.45 2016-01-01 15:00:00
2 Bar FP8177 7.21 2016-01-01 15:00:00
3 Foo FP1234 4.87 2016-01-02 15:00:00
4 Baz FP1231 3.00 2016-01-02 15:00:00
我想知道如何return上面的结果集,但是排除row 1
因为它和[=14=一样],row 3
是最近的。添加到我的推理中,row 1
和 3
是相同的,但是由于 row 3
具有更新的 created_at
时间戳,我只想看到这个。
棘手的是我需要能够在此基础上进行分页,而我希望避免使用 Laravel 的 Collection 方法 forPage
。
我的问题是
我可以使用 Laravel orderBy 和 groupBy if 运行 使用相等的操作数进行搜索,但是我还需要考虑 like .
您可以使用子查询来获取有序数据集以执行其他功能。
一个解决方案(我不知道你的表名,或者你传入的 LIKE 变量($queryTerm)是什么):
DB::table('tableName')->whereIn('tableName.id', function($subquery) {
$subquery->select('tableName.id')
->from('tableName')
->orderBy('created_at','DESC');
})
->where('tableName.column', 'LIKE', '%' .$queryTerm. '%')
->where('tableName.column', '=', $anotherQueryTerm)
->groupBy('tableName.MATERIAL')
->get();
与 Eloquent 完全相同,因为 Eloquent 使用下面的查询生成器来创建数据库查询:
SomeModel::whereIn('tableName.id', function($subquery) {
$subquery->select('tableName.id')
->from('tableName')
->orderBy('created_at','DESC');
})
->where('tableName.column', 'LIKE', '%' .$queryTerm. '%')
->where('tableName.column', '=', $anotherQueryTerm)
->groupBy('tableName.MATERIAL')
->get();