Implementasi relasi pada Model laravel dengan condition

Kali ini kita akan membahas implementasi model eloquent pada laravel. objective kita saat ini adalah untuk mendapatkan data dari suatu model yang ber-relasi kemudian hasil relasi tersebut kita tambahkan condition. Misal kita ingin mendapatkan data order / pembelian yang cara pembayarannya dengan "transfer manual".


Buatlah 2 model, dengan nama PaymentMethod.php dan Order.php. Kita akan menggunakan model PaymentMethod sebagai object mapper master data metode pembayaran (table ms_payment_method). dan model Order sebagai object mapper data transaksi pembelian / order.

- PaymentMethod.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Traits\HasRoles;
/**
* Class PaymentMethod
*/
class PaymentMethod extends Model
{
	use HasRoles;
	protected $table = 'ms_payment_method';
	protected $guarded = ['id'];
	public $timestamps = false; 
}


Value pada table ms_payment_method seperti contoh dibawah ini :

+----+-----------------+-----------------------+--------+---------------------+
| id | name            | note                  | status | created_at          |
+----+-----------------+-----------------------+--------+---------------------+
| 1  | COD             | Cash on Deliver       | 1      | 2020-11-20 10:30:07 |
+----+-----------------+-----------------------+--------+---------------------+
| 2  | Transfer Manual | Transfer ke rekeneing | 1      | 2020-11-20 10:31:08 |
+----+-----------------+-----------------------+--------+---------------------+
| 3  | Debit           | Kartu Debit           | 0      | 2020-11-20 10:32:09 |
+----+-----------------+-----------------------+--------+---------------------+


Order.php


<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Traits\HasRoles;
/**
* Class Order
*/
class Order extends Model
{
	use HasRoles;
	protected $table = 'tr_orders';
	protected $guarded = ['id'];
	public $timestamps = false; 
	

	public function metodebayar(){
		return $this->belongsTo('App\Models\PaymentMethod', 'id_method','id');
	}
	 
}


fungsi metodebayar dimaksud untuk medapatkan relasi data pada model PaymentMethod bahwa dalam table column id_method pada table tr_orders terelasikan dengan id pada table ms_payment_method.

Setelah itu tambahkan controller dengan nama OrderController.php


<?php

namespace App\Http\Controllers\;

use App\Models\Order;
use Exception;
use Illuminate\Support\Facades\Session;

class OrderController extends Controller
{

	public function getOrderTransfer()
	{
		$data = Order::
		Orderby('id','desc')
			->whereHas('metodebayar', function($q) {
				$q->where('id', '2');
			})->get();
		return response($data, 500);
	}
		
}


Terakhir tambahkan pada file web.php anda.

Route::get('getordertr', 'App\Http\Controllers\OrderController@getOrderTransfer')->name('getordertr');


Jalankan php artisan serve, kemudian buka url seperti contoh diatas.

Wasallam