如何在Laravel中向sql查询添加瞬时值

xyhw6mcr  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(101)

我在Laravel 8中有此查询:

$articles = Article::whereIn('category_id', $categories)->where(function ($query) {
        $query->where(function ($query2) {
            $query2->where('draft', 0)->whereNull('publication_date');
        })->orWhere(function ($query2) {
            $query2->where('draft', 0)->where('publication_date', '<=', DateHelper::currentDateTime());
        });
    })->orderBy('publicated_at', 'DESC')->get();

我需要给这个名为desc_id的查询添加一个暂时的id,这样我查询的值$articles就有一个基于publication_date的desc_id。
| 身份证|姓名|范畴|出版日期|描述标识|
| - ------| - ------| - ------| - ------| - ------|
| 三个|香蕉|新闻|2022年1月16日17时30分|1个|
| 二十七|几维鸟|新闻|2021年12月5日21时30分|三个|
| 五十|苹果|新闻|2022年1月7日09:14:00|第二章|
我尝试过将$articles的所有元素传入一个空数组并添加一个值来添加它:

$count =0;
$allArticles = [];

foreach ($articles as $article) {
    $count++;
    $allArticles[] = $article->with('desc_id', $count);
}

我知道我的方法是不正确的,但我希望它有助于理解我的问题。

mm9b1k5b

mm9b1k5b1#

它看起来像你想有行号的每一行,可以实现如下:

Article::whereIn(...)->select()
    ->addSelect(DB::raw('RANK() OVER(ORDER BY publicated_at DESC) as desc_id'))
    ->orderBy('publicated_at', 'DESC')
    ->get();

相关问题