0
0
0
share
#laravel#database#sql#eloquent
0 Komentar
10 Laravel Eloquent Tips dan Trik
Hai sobat Coders! Pada artikel ini kita akan membahas seputar tips dan trik Eloquent. Seperti yang kita ketahui Eloquent adalah sebuah fitur yang terdapat pada laravel yang digunakan untuk mengelola database dengan mudah. Eloquent menyediakan berbagai fungsi query SQL, namun mungkin banyak fungsi tersembunyi yang belum sobat Coders ketahui. Jadi, mari langsung kita bahas saja.
1. Increments dan Decrements
Daripada menggunakan ini:
$article = Article::find($article_id);
$article->read_count++;
$article->save();
Lebih baik gunakan ini:
$article = Article::find($article_id);
$article->increment('read_count');
Atau bisa juga seperti ini:
Article::find($article_id)->increment('read_count');
Article::find($article_id)->increment('read_count', 10); // +10
Product::find($produce_id)->decrement('stock'); // -1
2. XorY Methods
Eloquent menyediakan fungsi yang menggabungkan dua methods, seperti XorY (lakukan X, jika tidak lakukan Y)
Contoh 1 - findOrFail()
Daripada seperti ini:
$user = User::find($id);
if (!$user) { abort (404); }
Lebih baik lakukan ini:
$user = User::findOrFail($id);
Contoh 2 - firstOrCreate()
Daripada seperti ini:
$user = User::where('email', $email)->first();
if (!$user) {
User::create([
'email' => $email
]);
}
Lebih singkat seperti ini:
$user = User::firstOrCreate(['email' => $email]);
3. Relasi dengan Kondisi dan Ordering
Berikut cara yang biasa digunakan untuk membuat relasi.
public function users() {
return $this->hasMany('App\User');
}
Pada code realasi tersebut kita bisa menambahkan method where dan orderBy.
Misalnya jika kita ingin membuat relasi dengan kriteria tertentu untuk beberapa pengguna dan diurutkan oleh email, maka kita bisa melakukan ini.
public function approvedUsers() {
return $this->hasMany('App\User')
->where('approved', 1)
->orderBy('email');
}
4. Find Multiple Entries
Pasti Coders sudah tahu kan dengan method find
$user = User::find(1);
Tapi apakah kamu tahun kalau method find dapat menerima banyak ID sebagai Array:
$users = User::find([1,2,3]);
5. WhereX
Jika biasanya seperti ini:
$users = User::where('approved', 1)->get();
Kita bisa membuatnya seperti ini:
$users = User::whereApproved(1)->get();
6. Order by relationship
Pernahkan Coders melihat website forum atau portal berita? Nah, biasanya post terakhir berada pada paling atas. Dan berikut contoh trik untuk membuat post terakhir agar posisinya berada paling atas. Pertama, Pada Model buat sebuah method seperti ini
public function latestPost() {
return $this->hasOne(\App\Post::class)->latest();
}
Kemudian pada Controller tinggal menuliskan seperti ini
$users = Topic::with('latestPost')->get()->sortByDesc('latestPost.created_at');
7. Eloquent::when()
Mungkin banyak dari kita menuliskan query bersyarat dengan if-else, seperti ini:
if (request('filter_by') == 'likes') {
$query->where('likes', '>',request('likes_amount', 0));
}
if (request('filter_by') == 'date') {
$query->orderBy('created_at', request('ordering_rule', 'desc'));
}
Namun sebenarnya ada cara yang lebih baik, yaitu menggunakan when():
$query = Author::query();
$query->when(request('filter_by') == 'likes', function ($q) {
return $q->where('likes', '>', request('likes_amount', 0));
});
$query->when(request('filter_by') == 'date', function ($q) {
return $q->orderBy('created_at', request('ordering_rule', 'desc'));
});
Mungkin menggunakan when() lebih panjang codenya, tetapi yang berguna kita bisa melewatkan parameter seperti:
$query = User::query();
$query->when(request('role', false), function ($q, $role) {
return $q->where('role_id', $role);
});
$authors = $query->get();
8. Model boot() method
Method boot() dapat digunakan untuk mengganti default; Misalkan jika kita ingin User::all() selalu diurutkan berdasarkan field name, maka bisa buat seperti ini
protected static function boot() {
parent::boot();
// Order by name ASC
static::addGlobalScope('order', function (Builder $builder) {
$builder->orderBy('name', 'asc');
});
}
9. Ubah Query SQL ke Eloquent
Bagaimana jika kita mempunya query SQL seperti ini:
... WHERE (gender = 'Male' and age >= 18) or (gender = 'Female' and age >= 65)
Dan kita ingin mengubahnya ke Eloquent, jika sobat Coders melakukan cara seperti ini, maka ini adalah cara yang salah.
$q->where('gender', 'Male');
$q->orWhere('age', '>=', 18);
$q->where('gender', 'Female');
$q->orWhere('age', '>=', 65);
Cara yang benar adalah menggunakan fungsi closure sebagai sub-kueri:
$q->where(function ($query) {
$query->where('gender', 'Male')
->where('age', '>=', 18);
})->orWhere(function($query) {
$query->where('gender', 'Female')
->where('age', '>=', 65);
})
10. orWhere dengan Beberapa Parameter
Terakhir, kita bisa memberikan parameter array ke method orWhere Cara yang biasa:
$q->where('a', 1);
$q->orWhere('b', 2);
$q->orWhere('c', 3);
Cara menggunakan parameter array:
$q->where('a', 1);
$q->orWhere(['b' => 2, 'c' => 3]);
Oke selesai sudah pembahasan tentang tips dan trik Eloquent. Semoga berguna dan bermanfaat untuk Coders.
source: laravel-news
0
0
0
share