2017-07-20 11 views
0

網址:www.example.com/1(其中1是從表ID = 1)Laravel的跳躍()函數只在第一查詢工作

我有一個按鈕,允許用戶去下或者可能的話以前的記錄。 (www.example.com/2):

$next = Video::where('id', '>', $id)->min('id'); 

現在,當我希望用戶能夠跳10條記錄我想:

Video::where('id', '>=', $id)->skip(10)->first(); 

我得到正確的記錄(可以說從1跳到11)。但是,當我轉到下一個記錄(www.example.com/2)時,我會得到與skip()函數(11)完全相同的結果,甚至在記錄3中進一步下降,它仍然不會更新?

我沒有檢查進入skip()查詢的$ id是否正在更改。爲什麼這個功能不會更新?

P.S: 我的控制器:

public function show ($id){ 
$next = Video::where('id', '>', $id)->min('id'); 
$previous = Video::where('id', '<', $id)->max('id'); 
$skip = Video::where('id', '>=', $id)->skip(10)->first(); 

return view('page',[ 
'next' => $next, 
'prev' => $prev, 
'skip' => $skip, 
} 
+0

您試過了'$ skip = Video :: where('id','> =',$ id) - > get($ id + 10);'我不確定它是否會工作,如果get()會接受一個參數,但試試看。 – Chris

+0

你能告訴我們下一個按鈕的代碼嗎? – Maraboc

+0

@Chris該方法的問題是我的ID不是全部順序的。因此,它可能比想要的記錄少跳過,也可能沒有這樣的ID。我認爲skip()克服了這個問題。 – stepbystep

回答

0

first方法總是返回第一條記錄,並會尊重where條款,而忽略skip方法。

該提議的解決方案:

$collection = YourModel::where(SOMETHING HERE)->skip(10)->take(1)->get(); 

現在我們已經收集。我們可以通過不同的方式訪問第一個元素:

$item = $collection[0]; // array-like syntax 
$item = $collection->first(); // standard collection method