2016-08-12 14 views
5

W elokwencji, jak mogę pominąć 10 wierszy, a następnie uzyskać resztę stołu?Pomiń i weź wszystkie?

User::skip(10)->all(); 

Powyższe nie działa, ale daje wyobrażenie o tym, czego szukam.

Odpowiedz

3

Spróbuj tego:

$count = User::count(); 
$skip = 10; 

User::skip($skip)->take($count - $skip)->get(); 

Z jednego zapytania:

User::skip($skip)->take(18446744073709551615)->get(); 

Jest brzydki, ale jest to przykład from official MySQL manual:

To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter. This statement retrieves all rows from the 96th row to the last:

SELECT * FROM tbl LIMIT 95,18446744073709551615; 
+0

A jeśli chcesz tablicę, a następnie kontynuować wszystkie: 'użytkownika :: pominąć (10) -> get() -> wszystko();' –

+0

Dzięki ale to daje błąd: błąd składni lub dostępu naruszenie : 1064 Masz błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MariaDB dla właściwej składni do użycia w pobliżu '10' w wierszu 1 (SQL: wybierz * z 'user' offset 10). Baza danych działa jako użytkownik :: wszystko() działa poprawnie. – panthro

+0

To dziwne. OK, spróbuj zaktualizować kod, proszę. –

2

spróbować czegoś podobnego tej pracy to na pewno.

$temp = User::count(); 
$count = $temp - 10; 

$data = User::take($count)->skip(10)->get(); 
1

Laravel 5 zwraca Eumquent result as Collection. Możesz więc użyć funkcji collenction slice();

$users = User::get(); 
$slicedUsers = $users->slice(10); 
+2

To zadziała, ale może łatwo zabić pamięć, jeśli zrobisz to przy dużym stole. –

+0

@AlexeyMezenin yah, to prawda. Ale dla niektórych osób to też może być dobre rozwiązanie. Jeśli nie działają z dużymi tabelami. –

+2

@Autista_z To będzie odzyskać wszystkie dane pierwsze 10 zostanie usunięte, zamiast tego jest sztuczka z retriving w ten sposób, jak odpowiedział AlexeyMezenin. –