Heim  >  Artikel  >  Backend-Entwicklung  >  Laravel 如何查詢一個模型的含有特定條件的最新的關聯模型?

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

WBOY
WBOYOriginal
2016-10-22 00:14:11889Durchsuche

我剛剛在 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>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn