Skip to content

Commit e7ae0e8

Browse files
tambahan isi file
1 parent 125d550 commit e7ae0e8

8 files changed

+334
-13
lines changed
Original file line numberDiff line numberDiff line change
@@ -1 +1,161 @@
1-
on going
1+
### Read & Write Connections
2+
Kadang-kadang Anda mungkin ingin menggunakan satu koneksi database untuk pernyataan SELECT, dan satu lagi untuk pernyataan INSERT, UPDATE, dan DELETE. Laravel membuat ini mudah, dan koneksi yang tepat akan selalu digunakan baik Anda menggunakan kueri mentah, pembuat kueri, atau ORM Eloquent.
3+
4+
Untuk melihat bagaimana koneksi baca / tulis harus dikonfigurasi, mari kita lihat contoh ini:
5+
```java
6+
'mysql' => [
7+
'read' => [
8+
'host' => [
9+
'192.168.1.1',
10+
'196.168.1.2',
11+
],
12+
],
13+
'write' => [
14+
'host' => [
15+
'196.168.1.3',
16+
],
17+
],
18+
'sticky' => true,
19+
'driver' => 'mysql',
20+
'database' => 'database',
21+
'username' => 'root',
22+
'password' => '',
23+
'charset' => 'utf8mb4',
24+
'collation' => 'utf8mb4_unicode_ci',
25+
'prefix' => '',
26+
],
27+
```
28+
Perhatikan bahwa tiga kunci telah ditambahkan ke larik konfigurasi: **read, write** dan **sticky**.**read** dan **write** kunci memiliki nilai array yang berisi kunci tunggal: **host**. Opsi database lainnya untuk **read** dan **write** koneksi akan digabungkan dari **mysql** larik konfigurasi utama .
29+
30+
Anda hanya perlu menempatkan item dalam array **read** and **write** jika Anda ingin mengganti nilai dari **mysql** array utama . Jadi, dalam hal ini, **192.168.1.1** akan digunakan sebagai host untuk koneksi "baca", sedangkan **192.168.1.3** akan digunakan untuk koneksi "tulis". Kredensial basis data, awalan, kumpulan karakter, dan semua opsi lain di **mysql** larik utama akan dibagikan di kedua koneksi. Ketika beberapa nilai ada dalam **host** array konfigurasi, host database akan dipilih secara acak untuk setiap permintaan.
31+
32+
### The stickyOption
33+
The **sticky** pilihan adalah opsional nilai yang dapat digunakan untuk memungkinkan pembacaan langsung dari catatan yang telah ditulis ke database selama siklus permintaan saat ini. Jika **sticky** opsi diaktifkan dan operasi "tulis" telah dilakukan terhadap database selama siklus permintaan saat ini, operasi "baca" lebih lanjut akan menggunakan koneksi "tulis". Ini memastikan bahwa setiap data yang ditulis selama siklus permintaan dapat segera dibaca kembali dari database selama permintaan yang sama. Terserah Anda untuk memutuskan apakah ini perilaku yang diinginkan untuk aplikasi Anda.
34+
35+
### Running SQL Queries
36+
Setelah Anda mengonfigurasi koneksi database, Anda dapat menjalankan kueri menggunakan **DB**fasad. The **DB**fasad menyediakan metode untuk setiap jenis query: **select, update, insert, delete,** dan **statement**.
37+
38+
### Running A Select Query
39+
Untuk menjalankan kueri SELECT dasar, Anda dapat menggunakan **select**metode pada **DB**fasad:
40+
```java
41+
<?php
42+
43+
namespace App\Http\Controllers;
44+
45+
use App\Http\Controllers\Controller;
46+
use Illuminate\Support\Facades\DB;
47+
48+
class UserController extends Controller
49+
{
50+
/**
51+
* Show a list of all of the application's users.
52+
*
53+
* @return \Illuminate\Http\Response
54+
*/
55+
public function index()
56+
{
57+
$users = DB::select('select * from users where active = ?', [1]);
58+
59+
return view('user.index', ['users' => $users]);
60+
}
61+
}
62+
```
63+
Argumen pertama yang diteruskan ke **select**metode adalah kueri SQL, sedangkan argumen kedua adalah pengikatan parameter apa pun yang perlu diikat ke kueri. Biasanya, ini adalah nilai dari **where** batasan klausa. Pengikatan parameter memberikan perlindungan terhadap injeksi SQL.
64+
65+
**select** metode akan selalu mengembalikan **array**hasil. Setiap hasil dalam array akan menjadi **stdClass**objek PHP yang mewakili catatan dari database:
66+
```java
67+
use Illuminate\Support\Facades\DB;
68+
69+
$users = DB::select('select * from users');
70+
71+
foreach ($users as $user) {
72+
echo $user->name;
73+
}
74+
```
75+
### Using Named Bindings
76+
Alih-alih menggunakan **?**untuk mewakili binding parameter Anda, Anda dapat menjalankan kueri menggunakan binding bernama:
77+
```java
78+
$results = DB::select('select * from users where id = :id', ['id' => 1]);
79+
```
80+
### Running An Insert Statement
81+
Untuk mengeksekusi **insert** pernyataan, Anda dapat menggunakan **insert** metode pada **DB** fasad. Seperti **select**, metode ini menerima kueri SQL sebagai argumen pertama dan binding sebagai argumen kedua:
82+
```java
83+
use Illuminate\Support\Facades\DB;
84+
85+
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Marc']);
86+
```
87+
### Running An Update Statement
88+
**update** metode harus digunakan untuk memperbarui catatan yang ada dalam database. Jumlah baris yang terpengaruh oleh pernyataan dikembalikan oleh metode:
89+
```java
90+
use Illuminate\Support\Facades\DB;
91+
92+
$affected = DB::update(
93+
'update users set votes = 100 where name = ?',
94+
['Anita']
95+
);
96+
```
97+
### Running A Delete Statement
98+
**delete** Metode harus digunakan untuk menghapus catatan dari database. Seperti **update**, jumlah baris yang terpengaruh akan dikembalikan dengan metode:
99+
```java
100+
use Illuminate\Support\Facades\DB;
101+
102+
$deleted = DB::delete('delete from users');
103+
```
104+
### Running A General Statement
105+
Beberapa pernyataan database tidak mengembalikan nilai apa pun. Untuk jenis operasi ini, Anda dapat menggunakan **statement** metode pada **DB**fasad:
106+
```java
107+
DB::statement('drop table users');
108+
```
109+
### Running An Unprepared Statement
110+
Terkadang Anda mungkin ingin menjalankan pernyataan SQL tanpa mengikat nilai apa pun. Anda dapat menggunakan metode **DB** fasad **unprepared** untuk mencapai ini:
111+
```java
112+
DB::unprepared('update users set votes = 100 where name = "Dries"');
113+
```
114+
### Using Multiple Database Connections
115+
Jika aplikasi Anda mendefinisikan beberapa koneksi dalam **config/database.php** file konfigurasi Anda, Anda dapat mengakses setiap koneksi melalui **connection** metode yang disediakan oleh **DB** fasad. Nama koneksi yang diteruskan ke **connection** metode harus sesuai dengan salah satu koneksi yang terdaftar di **config/database.php** file konfigurasi Anda atau dikonfigurasi saat runtime menggunakan **config** helper:
116+
```java
117+
use Illuminate\Support\Facades\DB;
118+
119+
$users = DB::connection('sqlite')->select(...);
120+
```
121+
Anda dapat mengakses instans PDO dasar dari koneksi menggunakan getPdometode pada instans koneksi:
122+
```java
123+
$pdo = DB::connection()->getPdo();
124+
```
125+
### Listening For Query Events
126+
Jika Anda ingin menentukan penutupan yang dipanggil untuk setiap kueri SQL yang dijalankan oleh aplikasi Anda, Anda dapat menggunakan metode **DB**fasad **listen**. Metode ini dapat berguna untuk membuat log kueri atau debugging. Anda dapat mendaftarkan penutupan pendengar kueri Anda dalam **boot**metode penyedia layanan :
127+
```java
128+
<?php
129+
130+
namespace App\Providers;
131+
132+
use Illuminate\Support\Facades\DB;
133+
use Illuminate\Support\ServiceProvider;
134+
135+
class AppServiceProvider extends ServiceProvider
136+
{
137+
/**
138+
* Register any application services.
139+
*
140+
* @return void
141+
*/
142+
public function register()
143+
{
144+
//
145+
}
146+
147+
/**
148+
* Bootstrap any application services.
149+
*
150+
* @return void
151+
*/
152+
public function boot()
153+
{
154+
DB::listen(function ($query) {
155+
// $query->sql;
156+
// $query->bindings;
157+
// $query->time;
158+
});
159+
}
160+
}
161+
```

6.Model&Eloquent/e.data_pagination.md

+169-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,169 @@
1-
on going
2-
on going
1+
## Pengantar
2+
3+
Paginator Laravel terintegrasi dengan query builder dan Eloquent ORM dan menyediakan pagination record database yang nyaman dan mudah digunakan tanpa konfigurasi nol.
4+
5+
Secara default, HTML yang dihasilkan oleh paginator kompatibel dengan framework Tailwind CSS ; namun, dukungan pagination Bootstrap juga tersedia.
6+
## Penggunaan Dasar
7+
### Membuat Paginasi Hasil Query Builder
8+
Ada beberapa cara untuk membuat halaman item. Yang paling sederhana adalah dengan menggunakan **paginate** metode pada query builder atau query Eloquent . **paginate** Metode otomatis menangani pengaturan queri "batas" dan "offset" berdasarkan pada halaman saat ini sedang dilihat oleh pengguna. Secara default, halaman saat ini dideteksi oleh nilai **page** argumen string queri pada permintaan HTTP. Nilai ini secara otomatis terdeteksi oleh Laravel, dan juga secara otomatis dimasukkan ke dalam tautan yang dihasilkan oleh paginator.
9+
10+
Dalam contoh ini, satu-satunya argumen yang diteruskan ke **paginate** metode adalah jumlah item yang ingin Anda tampilkan "per halaman". Dalam hal ini, mari kita tentukan bahwa kita ingin menampilkan 15 item per halaman:
11+
```java
12+
<?php
13+
14+
namespace App\Http\Controllers;
15+
16+
use App\Http\Controllers\Controller;
17+
use Illuminate\Support\Facades\DB;
18+
19+
class UserController extends Controller
20+
{
21+
/**
22+
* Show all of the users for the application.
23+
*
24+
* @return \Illuminate\Http\Response
25+
*/
26+
public function index()
27+
{
28+
return view('user.index', [
29+
'users' => DB::table('users')->paginate(15)
30+
]);
31+
}
32+
}
33+
```
34+
### paginasi sederhana
35+
Metode **paginate** menghitung jumlah total catatan cocok dengan queri sebelum mengambil catatan dari database. Hal ini dilakukan agar paginator mengetahui jumlah halaman record yang ada secara total. Namun, jika Anda tidak berencana untuk menampilkan jumlah total halaman di UI aplikasi Anda, maka queri penghitungan catatan tidak diperlukan.
36+
37+
Oleh karena itu, jika Anda hanya perlu menampilkan tautan "Berikutnya" dan "Sebelumnya" sederhana di UI aplikasi, Anda dapat menggunakan **simplePaginate** metode ini untuk melakukan kueri tunggal yang efisien:
38+
```java
39+
$users = DB::table('users')->simplePaginate(15);
40+
```
41+
### Membuat Paginasi Hasil Fasih
42+
Dalam contoh ini, kami akan membuat halaman **App\Models\User** model dan menunjukkan bahwa kami berencana untuk menampilkan 15 catatan per halaman. Seperti yang Anda lihat, sintaksnya hampir identik dengan membuat halaman hasil query builder:
43+
```java
44+
use App\Models\User;
45+
46+
$users = User::paginate(15);
47+
```
48+
Tentu saja, Anda dapat memanggil **paginate** metode setelah menetapkan batasan lain pada kueri, seperti **where** klausa:
49+
```java
50+
$users = User::where('votes', '>', 100)->paginate(15);
51+
```
52+
Anda juga dapat menggunakan **simplePaginate** metode ini saat membuat paginasi model Eloquent:
53+
```java
54+
$users = User::where('votes', '>', 100)->simplePaginate(15);
55+
```
56+
Demikian pula, Anda dapat menggunakan **cursorPaginate** metode untuk membuat kursor paginasi model Eloquent:
57+
```java
58+
$users = User::where('votes', '>', 100)->cursorPaginate(15);
59+
```
60+
### Paginasi Kursor
61+
Sementara **paginate** dan **simplePaginate** membuat kueri menggunakan klausa "offset" SQL, paginasi kursor bekerja dengan membuat klausa "di mana" yang membandingkan nilai kolom terurut yang terdapat dalam kueri, memberikan kinerja database paling efisien yang tersedia di antara semua metode paginasi Laravel. Metode pagination ini sangat cocok untuk kumpulan data besar dan antarmuka pengguna scrolling "tak terbatas".
62+
63+
Tidak seperti pagination berbasis offset, yang menyertakan nomor halaman dalam string kueri URL yang dihasilkan oleh paginator, pagination berbasis kursor menempatkan string "kursor" dalam string kueri. Kursor adalah string yang disandikan yang berisi lokasi kueri paginasi berikutnya harus memulai penomoran halaman dan arah yang harus dipaginasi:
64+
```java
65+
http://localhost/users?cursor=eyJpZCI6MTUsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0
66+
```
67+
Anda dapat membuat instance paginator berbasis kursor melalui **cursorPaginate** metode yang ditawarkan oleh pembuat kueri. Metode ini mengembalikan sebuah instance dari **Illuminate\Pagination\CursorPaginator**:
68+
```java
69+
$users = DB::table('users')->orderBy('id')->cursorPaginate(15);
70+
```
71+
Setelah Anda mengambil instance paginator kursor, Anda dapat menampilkan hasil pagination seperti biasanya saat menggunakan metode **paginate** and **simplePaginate**. Untuk informasi lebih lanjut tentang metode instans yang ditawarkan oleh kursor paginator, silakan lihat dokumentasi metode instans paginator kursor .
72+
73+
### Membuat Paginator Secara Manual
74+
Terkadang Anda mungkin ingin membuat instance pagination secara manual, meneruskannya ke array item yang sudah Anda miliki di memori. Anda dapat melakukannya dengan membuat **Illuminate\Pagination\Paginator, Illuminate\Pagination\LengthAwarePaginator** atau **Illuminate\Pagination\CursorPaginatorinstance,** tergantung pada kebutuhan Anda.
75+
76+
**Paginator** dan **CursorPaginator** kelas tidak perlu tahu jumlah item di set hasil; namun, karena ini, kelas-kelas ini tidak memiliki metode untuk mengambil indeks halaman terakhir. Di **LengthAwarePaginator** menerima hampir argumen yang sama seperti Paginator; namun, ini membutuhkan hitungan jumlah total item dalam kumpulan hasil.
77+
78+
Dengan kata lain, **Paginator** sesuai dengan **simplePaginate** metode pada pembuat kueri, **CursorPaginator** sesuai dengan **cursorPaginate** metode, dan **LengthAwarePaginator** sesuai dengan **paginate** metode.
79+
### Menyesuaikan URL Pagination
80+
Secara default, tautan yang dihasilkan oleh paginator akan cocok dengan URI permintaan saat ini. Namun, metode paginator **withPath** memungkinkan Anda untuk menyesuaikan URI yang digunakan oleh paginator saat membuat tautan. Misalnya, jika Anda ingin paginator menghasilkan tautan seperti **http://example.com/admin/users?page=N,** Anda harus meneruskan **/admin/users** ke **withPath** metode:
81+
```java
82+
use App\Models\User;
83+
84+
Route::get('/users', function () {
85+
$users = User::paginate(15);
86+
87+
$users->withPath('/admin/users');
88+
89+
//
90+
});
91+
```
92+
### Menambahkan Nilai String Kueri
93+
Anda dapat menambahkan string queri tautan pagination menggunakan **appends** metode ini. Misalnya, untuk menambahkan **sort=votes** ke setiap tautan pagination, Anda harus membuat panggilan berikut ke **appends**:
94+
```java
95+
use App\Models\User;
96+
97+
Route::get('/users', function () {
98+
$users = User::paginate(15);
99+
100+
$users->appends(['sort' => 'votes']);
101+
102+
//
103+
});
104+
```
105+
Anda dapat menggunakan **withQueryString** metode ini jika ingin menambahkan semua nilai string queri permintaan saat ini ke tautan pagination:
106+
```java
107+
$users = User::paginate(15)->withQueryString();
108+
```
109+
### Menambahkan Fragmen Hash
110+
Jika Anda perlu menambahkan "fragmen hash" ke URL yang dihasilkan oleh paginator, Anda dapat menggunakan **fragment** metode ini. Misalnya, untuk menambahkan **#users** ke akhir setiap tautan pagination, Anda harus memanggil **fragment** metode seperti ini:
111+
```java
112+
$users = User::paginate(15)->fragment('users');
113+
```
114+
### Menampilkan Hasil Pagination
115+
Saat memanggil **paginate** metode, Anda akan menerima turunan dari **Illuminate\Pagination\LengthAwarePaginator,** saat memanggil **simplePaginate** metode mengembalikan turunan dari **Illuminate\Pagination\Paginator.** Dan, akhirnya, memanggil **cursorPaginate** metode mengembalikan sebuah instance dari **Illuminate\Pagination\CursorPaginator**.
116+
117+
Objek-objek ini menyediakan beberapa metode yang menjelaskan kumpulan hasil. Selain metode pembantu ini, instance paginator adalah iterator dan dapat diulang sebagai array. Jadi, setelah Anda mengambil hasilnya, Anda dapat menampilkan hasilnya dan merender tautan halaman menggunakan Blade :
118+
```java
119+
<div class="container">
120+
@foreach ($users as $user)
121+
{{ $user->name }}
122+
@endforeach
123+
</div>
124+
125+
{{ $users->links() }}
126+
```
127+
**links**Metode akan membuat link ke seluruh halaman dalam hasil set. Masing-masing tautan ini sudah akan berisi pagevariabel string kueri yang tepat . Ingat, HTML yang dihasilkan oleh linksmetode ini kompatibel dengan kerangka kerja Tailwind CSS .
128+
## Metode Instance Paginator dan LengthAwarePaginator
129+
Setiap instance paginator memberikan informasi pagination tambahan melalui metode berikut:
130+
| Metode | Deskripsi |
131+
| --- | --- |
132+
|$paginator->count() |Dapatkan jumlah item untuk halaman saat ini.|
133+
|$paginator->currentPage() |Dapatkan nomor halaman saat ini.|
134+
|$paginator->firstItem() |Dapatkan nomor hasil item pertama dalam hasil.|
135+
|$paginator->getOptions() |Dapatkan opsi paginator.|
136+
|$paginator->getUrlRange($start, $end) |Buat rentang URL pagination.|
137+
|$paginator->hasPages() |Tentukan apakah ada cukup item untuk dibagi menjadi beberapa halaman.|
138+
|$paginator->hasMorePages() |Tentukan apakah ada lebih banyak item di penyimpanan data.|
139+
|$paginator->items() |Dapatkan item untuk halaman saat ini.|
140+
|$paginator->lastItem() |Dapatkan nomor hasil item terakhir dalam hasil.|
141+
|$paginator->lastPage() |Dapatkan nomor halaman dari halaman terakhir yang tersedia. (Tidak tersedia saat menggunakan simplePaginate).|
142+
|$paginator->nextPageUrl() |Dapatkan URL untuk halaman berikutnya.|
143+
|$paginator->onFirstPage() |Tentukan apakah paginator ada di halaman pertama.|
144+
|$paginator->perPage() |Jumlah item yang akan ditampilkan per halaman.|
145+
|$paginator->previousPageUrl() |Dapatkan URL untuk halaman sebelumnya.|
146+
|$paginator->total() |Tentukan jumlah total item yang cocok di penyimpanan data. (Tidak tersedia saat menggunakan simplePaginate).|
147+
|$paginator->url($page) |Dapatkan URL untuk nomor halaman tertentu.|
148+
|$paginator->getPageName() |Dapatkan variabel string kueri yang digunakan untuk menyimpan halaman.|
149+
|$paginator->setPageName($name) |Setel variabel string kueri yang digunakan untuk menyimpan halaman.|
150+
## Metode Instance Paginator Kursor
151+
Setiap instance paginator kursor memberikan informasi pagination tambahan melalui metode berikut:
152+
153+
|metode |Deskripsi|
154+
|---|---|
155+
|$paginator->count() |Dapatkan jumlah item untuk halaman saat ini.|
156+
|$paginator->cursor() |Dapatkan instance kursor saat ini.|
157+
|$paginator->getOptions() |Dapatkan opsi paginator.|
158+
|$paginator->hasPages() |Tentukan apakah ada cukup item untuk dibagi menjadi beberapa halaman.|
159+
|$paginator->hasMorePages() |Tentukan apakah ada lebih banyak item di penyimpanan data.|
160+
|$paginator->getCursorName() |Dapatkan variabel string kueri yang digunakan untuk menyimpan kursor.|
161+
|$paginator->items() |Dapatkan item untuk halaman saat ini.|
162+
|$paginator->nextCursor() |Dapatkan instance kursor untuk set item berikutnya.|
163+
|$paginator->nextPageUrl() |Dapatkan URL untuk halaman berikutnya.|
164+
|$paginator->onFirstPage() |Tentukan apakah paginator ada di halaman pertama.|
165+
|$paginator->perPage() |Jumlah item yang akan ditampilkan per halaman.|
166+
|$paginator->previousCursor() |Dapatkan instance kursor untuk set item sebelumnya.|
167+
|$paginator->previousPageUrl() |Dapatkan URL untuk halaman sebelumnya.|
168+
|$paginator->setCursorName() |Atur variabel string kueri yang digunakan untuk menyimpan kursor.|
169+
|$paginator->url($cursor) |Dapatkan URL untuk instance kursor tertentu.|

7.View/a.menampilkan_view_dari_controller.md

-1
This file was deleted.

7.View/b.menampilkan_data_ke_view.md

-1
This file was deleted.

7.View/c.control_structure.md

-1
This file was deleted.

7.View/d.menampilkan_kumpulan_data.md

-1
This file was deleted.

7.View/e.blade_layout_section_dan_component.md

-1
This file was deleted.

README.md

+4-5
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,10 @@ Focusing on :
4444
- [Soft Deletes](6.Model&Eloquent/d.soft_deletes.md)
4545
- [Data Pagination](6.Model&Eloquent/e.data_pagination.md)
4646
7. View
47-
- [Menampilkan view dari controller](7.View/a.menampilkan_view_dari_controller.md)
48-
- [Menampilkan data ke view](7.View/b.menampilkan_data_ke_view.md)
49-
- [Control Structure (@IF, @unless, @empty, @auth ,etc)](7.View/c.control_structure.md)
50-
- [Menampilkan Kumpulan Data (@foreach, @forelse, @for, @while , etc)](7.View/d.menampilkan_kumpulan_data.md)
51-
- [Blade Layout, Section & Component](7.View/e.blade_layout_section_dan_component.md)
47+
- [Views](7.View/a.views.md)
48+
- [Control Structure (@IF, @unless, @empty, @auth ,etc)](7.View/b.control_structure.md)
49+
- [Menampilkan Kumpulan Data (@foreach, @forelse, @for, @while , etc)](7.View/c.menampilkan_kumpulan_data.md)
50+
- [Blade Layout, Section & Component](7.View/d.blade_layout_section_dan_component.md)
5251
- @extends
5352
- @yield
5453
- @section

0 commit comments

Comments
 (0)