如何使用 LIKE 关键字和在 laravel 查询生成器中传递变量来制作自定义 orderBy 或 DB::raw(FIELD())

Posted

技术标签:

【中文标题】如何使用 LIKE 关键字和在 laravel 查询生成器中传递变量来制作自定义 orderBy 或 DB::raw(FIELD())【英文标题】:How to make custom orderBy or DB::raw(FIELD()) with LIKE keyword and passing variable in laravel query builder 【发布时间】:2021-04-23 12:08:04 【问题描述】:

我有一个非常简单的解决方案,但我不喜欢它。那么,我该怎么做呢?

我的数据库是

--------------------------------------
id   name   view       created_at
--------------------------------------
1   one     9      2021-01-13 12:34:22
2   two     8      2021-01-15 10:23:02
3   three   23     2021-01-15 20:55:17
4   forth   15     2021-01-16 12:34:22
5   fifth   0      2021-01-19 10:37:02

我想像这样排序和获取我的数据--

--------------------------------------
id   name   view       created_at
--------------------------------------
5   fifth   0      2021-01-19 10:37:02
3   three   23     2021-01-15 20:55:17
4   forth   15     2021-01-16 12:34:22
1   one     9     2021-01-13 12:34:22
2   two     8     2021-01-15 10:23:02

我的解决办法是

        $today = '2021-01-19';  //this date will calculate in daily. Not absolute date!

        $firstarray=Product::where('created_at','LIKE',$today.'%')->get();
        $secondarray=Product::orderBy('viewer', 'DESC')->get();
        $data = array_merge($firstarray,$secondarray);
        return $data;

实际上,我想让我的代码像这样

    $today = '2021-01-19';  //this date will calculate in daily. Not absolute date!
    $data = Product::orderBy(DB::raw('FIELD(created_at, LIKE $today."%")'),'DESC')
            ->orderBy('view','desc')->get();
    return $data;

如何为我的问题获得强大的代码?

对不起我的英语水平谢谢大家

【问题讨论】:

问题不清楚,您希望除$today 之外的所有结果都排在第一位吗?也许orderByRaw 喜欢here? 是的@Tpojka,$today 的所有结果都是第一个,然后我想按视图订购剩余的结果。 $today 结果无需关心按视图排序。 那个链接有帮助吗? 不,我不清楚。我还不能解决我的问题。 【参考方案1】:

你的问题不清楚!如果这是我理解的方式,那就是解决方案。

$data = Product::whereDate('created_at', now())->orderBy('view','desc')->get();

【讨论】:

您的建议无法解决我的问题。您的查询仅得到 created_at 正在处理日期并已排序 orderby('view','desc')【参考方案2】:

我猜你首先需要今天的记录,然后是按视图排序的其余记录。所以在这种情况下,您可以将结果排序为

Product::orderByRaw("date_format(created_at ,'%Y-%m-%d') = ? desc, view desc", [$today])
         ->get();

DEMO

【讨论】:

很好的解决方案!!! 工作正常!!! 非常感谢

以上是关于如何使用 LIKE 关键字和在 laravel 查询生成器中传递变量来制作自定义 orderBy 或 DB::raw(FIELD())的主要内容,如果未能解决你的问题,请参考以下文章

如何在数据库里 用like语句查询成语 !

sql 对同一字段进行模糊查询时如何将两个条件写入一个like中

如何在 Laravel 中使用 LIKE 语句使用查询结果并再次查询

如何使用 WHERE LIKE (或等效)搜索 Laravel 集合

如何使用 Laravel 在 LIKE 搜索中使用 ORM 从两个表中获取数据

PHP中怎么实现关键字搜索?