首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询生成器在laravel紧急加载中使用whereRaw条件

查询生成器在laravel紧急加载中使用whereRaw条件
EN

Stack Overflow用户
提问于 2018-06-26 18:01:17
回答 2查看 4.1K关注 0票数 1

我们想要的是那些抱怨,它的生存期(created_at- now())比抱怨生命期(存储在complain_type表上的生存期)要好得多。

01.投诉表:

代码语言:javascript
复制
+---+------------+-----------------+
|id | complain_preset_id  | created_at      |
+---+------------+-----------------+
| 1 | 48         | 3/16/2018 10:30 |
| 2 | 13         | 3/16/2018 10:43 |
| 3 | 12         | 3/16/2018 10:57 |
+---+------------+-----------------+

02。投诉预置表:

代码语言:javascript
复制
+---+------------+-----------------+
|id | type_id    | created_at      |
+---+------------+-----------------+
| 1 |  1         |  3/16/2018 6:29 |
| 2 |  2         |  3/16/2018 6:29 |
| 3 |  3         |  3/16/2018 6:29 |
+---+------------+-----------------+

03.投诉类型表

代码语言:javascript
复制
+---+------------+
|id | lifetime   |
+---+------------+
| 1 |  10        |
| 2 |  36        |
| 3 |  360       |
| 4 |  500       |
+---+------------+

抱怨->预设之间的关系是:

代码语言:javascript
复制
public function preset()
{
    return $this->belongsTo(ComplainPreset::class, 'complain_preset_id');
}

预设->抱怨之间的关系是:

代码语言:javascript
复制
public function complains()
{
    return $this->hasMany(Complain::class, 'complain_id');
}

并预置->抱怨类型:

代码语言:javascript
复制
public function complainType()
{
    return $this->belongsTo(ComplainType::class, 'type_id');
}

抱怨类型->预设:

代码语言:javascript
复制
public function presets()
{
    return $this->hasMany(ComplainPreset::class);
}

他们之间没有直接的关系向complain_type投诉。

这是我们的解决方案,雄辩的质疑。但是那个查询不起作用。

complain->preset->complain_type关系是

代码语言:javascript
复制
Complain::with(['preset' => function ($q) {
    $q->with(['complainType' => function($q2) {
        $q2->whereRaw('SUBTIME(NOW(), lifetime) > complains.created_at');
    }]);
}])->whereDate('created_at', '=' , Carbon::today());

在第3行中,这个查询没有得到complains.created_at,因为这一行引用了complain_type表。在第3行,我们需要访问complains.created_at。

是他们的口才吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-26 22:53:11

您可以使用whereHas()

代码语言:javascript
复制
Complain::whereHas('preset.complainType', function($query) {
    $query->whereRaw('SUBTIME(NOW(), lifetime) > complains.created_at');
})->whereDate('complains.created_at', '=', Carbon::today());
票数 2
EN

Stack Overflow用户

发布于 2018-06-26 19:17:24

我们想要那些抱怨

您可以使用联接使用主表complains的列和间接(通过complain_preset)相关的表complain_type应用筛选器。

代码语言:javascript
复制
Complain::with('preset')
        ->join('complain_preset as cs','complains.complain_preset_id','=', 'cs.id')
        ->join('complain_type as ct','cs.type_id','=', 'ct.id')
        ->whereRaw('SUBTIME(NOW(), ct.lifetime) > complains.created_at')
        ->whereDate('complains.created_at', '=' , Carbon::today());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51048999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档