我剛剛在 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>