Laravel 5.2 : Как следовать сухой в том же rightJoin

У меня есть это 4 право присоединиться, разница в том, где harga_sewa.description.

public function method_controller(Request $request, $id){
$dasar = Vehicle::rightJoin('harga_sewa', function ($join){
        $join->on('vehicles.car_class_id', '=', 'harga_sewa.car_class_id');
        $join->on('vehicles.zone_id', '=', 'harga_sewa.zone_id');
    })
    ->select('vehicles.license_plate', 'harga_sewa.value')
    ->where('harga_sewa.description', 'dasar')
    ->where('vehicles.id', $id)
    ->first();

    $luar_kota = Vehicle::rightJoin('harga_sewa', function ($join){
        $join->on('vehicles.car_class_id', '=', 'harga_sewa.car_class_id');
        $join->on('vehicles.zone_id', '=', 'harga_sewa.zone_id');
    })
    ->select('vehicles.license_plate', 'harga_sewa.value')
    ->where('harga_sewa.description', 'luar kota')
    ->where('vehicles.id', $id)
    ->first();

    $overtime = Vehicle::rightJoin('harga_sewa', function ($join) {
        $join->on('vehicles.car_class_id', '=', 'harga_sewa.car_class_id');
        $join->on('vehicles.zone_id', '=', 'harga_sewa.zone_id');
    })
    ->select('vehicles.license_plate', 'harga_sewa.value')
    ->where('harga_sewa.description', 'overtime')
    ->where('vehicles.id', $id)
    ->first();

    $sopir = Vehicle::rightJoin('harga_sewa', function ($join) {
        $join->on('vehicles.car_class_id', '=', 'harga_sewa.car_class_id');
        $join->on('vehicles.zone_id', '=', 'harga_sewa.zone_id');
    })
    ->select('vehicles.license_plate', 'harga_sewa.value')
    ->where('harga_sewa.description', 'sopir')
    ->where('vehicles.id', $id)
    ->first();

    //get the value of each right join
    $dasar = $dasar->value;
    $luar_kota = $luar_kota->value;
    $overtime = $overtime->value;
    $sopir = $sopir->value;
}

Я думаю, что это уродливый код, как следует следовать сухому принципу?

1 ответ

  1. Добавление области в Vehicleкласс

    public function scopeHargaSewa($query)
        {
            return $query->rightJoin('harga_sewa', function ($join) {
                $join->on('vehicles.zone_id', '=', 'harga_sewa.zone_id');
                $join->on('vehicles.car_class_id', '=', 'harga_sewa.car_class_id');
            });
        }
    

    Затем преобразуйте это

    $dasar = Vehicle::rightJoin('harga_sewa', function ($join){
            $join->on('vehicles.car_class_id', '=', 'harga_sewa.car_class_id');
            $join->on('vehicles.zone_id', '=', 'harga_sewa.zone_id');
        })
        ->select('vehicles.license_plate', 'harga_sewa.value')
        ->where('harga_sewa.description', 'dasar')
        ->where('vehicles.id', $id)
        ->first();
    

    к

    $dasar = Vehicle::hargaSewa()
        ->select('vehicles.license_plate', 'harga_sewa.value')
        ->where('harga_sewa.description', 'dasar')
        ->where('vehicles.id', $id)
        ->first();
    

    то же самое касается и других.