Laravel 如何查詢一個模型的含有特定條件的最新的關聯模型?

WBOY
发布: 2016-10-22 00:14:11
原创
888 人浏览过

我剛剛在 StackOverflow 上提的問題,求解答。

http://stackoverflow.com/ques...

一個 Package 模型,有許多 Step 模型。Step 的字段中有這樣兩條,tinyint 型 status 字段和 時間戳字段。
假設一個 Package A,有下列 steps

  • 18號10點,status 爲 1

  • 19號9點,status 爲 2

假設一個 Package B,有下列 steps

  • 19號8點,status 爲 1

  • 19號9點,status 爲 2

  • 19號10點,status 爲 3

這樣 A 的最新 step status 是 2,B 是 3.

然後,如何查詢出最新 step status 爲 2 的 packages?

我嘗試在 package 模型中加入

<code>public function steps()
{
    return $this->hasMany('App\Step');
}

public function status()
{
    return $this->steps()->latest()->limit(1);
}
</code>
登录后复制
登录后复制

然後這樣查詢

<code>Package::whereHas('status', function ($q) {
    $q->where('status', 2);
})->get();
</code>
登录后复制
登录后复制

但是卻不能得到期望的結果。

所謂不是期望的結果,指的是,如果,packages 表 裏面,衹有 B 這一個,我想查詢出最新 step status 爲 2 的 packages,B 最新是 3 所以應該結果爲空,但這樣查詢出結果并不是空,而是包含了 B。

然後我試著換成

<code>public function status()
{
    return $this->hasOne('App\Step')->latest();
}
</code>
登录后复制
登录后复制

也還是一樣。

剛學 Laravel ,遇到這個問題很困惑,也查了很多 Google ,都沒有想要的答案。希望大家幫幫我,多謝!

用的 Laravel 5.3

回复内容:

我剛剛在 StackOverflow 上提的問題,求解答。

http://stackoverflow.com/ques...

一個 Package 模型,有許多 Step 模型。Step 的字段中有這樣兩條,tinyint 型 status 字段和 時間戳字段。
假設一個 Package A,有下列 steps

  • 18號10點,status 爲 1

  • 19號9點,status 爲 2

假設一個 Package B,有下列 steps

  • 19號8點,status 爲 1

  • 19號9點,status 爲 2

  • 19號10點,status 爲 3

這樣 A 的最新 step status 是 2,B 是 3.

然後,如何查詢出最新 step status 爲 2 的 packages?

我嘗試在 package 模型中加入

<code>public function steps()
{
    return $this->hasMany('App\Step');
}

public function status()
{
    return $this->steps()->latest()->limit(1);
}
</code>
登录后复制
登录后复制

然後這樣查詢

<code>Package::whereHas('status', function ($q) {
    $q->where('status', 2);
})->get();
</code>
登录后复制
登录后复制

但是卻不能得到期望的結果。

所謂不是期望的結果,指的是,如果,packages 表 裏面,衹有 B 這一個,我想查詢出最新 step status 爲 2 的 packages,B 最新是 3 所以應該結果爲空,但這樣查詢出結果并不是空,而是包含了 B。

然後我試著換成

<code>public function status()
{
    return $this->hasOne('App\Step')->latest();
}
</code>
登录后复制
登录后复制

也還是一樣。

剛學 Laravel ,遇到這個問題很困惑,也查了很多 Google ,都沒有想要的答案。希望大家幫幫我,多謝!

用的 Laravel 5.3

<code>Package::whereHas('steps', function ($q) {
    $q->where('status', 2);
})->get();</code>
登录后复制
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!