unioil-loyalty-app/app/Ratings.php

85 lines
2.0 KiB
PHP

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Ratings extends Model
{
/**
* Table name of model
*
* @var string
*/
protected $table = 'ratings';
/**
* Primary key field name of table
*
* @var string
*/
protected $primaryKey = 'rating_id';
/**
* Additional fields from other connected tables
*
* @var array
*/
protected $appends = [];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [];
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = ['rating_id','is_active'];
public function loyaltyCard()
{
return $this->hasOne('App\LoyaltyCard','lcard_id','lcard_id');
}
public function payment()
{
return $this->hasOne('App\Payment','payment_id','payment_id');
}
public function station()
{
return $this->hasOne('App\Station','station_id','station_id');
}
public function scopeSort($query, $field, $order)
{
switch ($field) {
case 'card_number':
$query->leftJoin('loyalty_card', 'loyalty_card.lcard_id', '=','ratings.lcard_id');
$query->orderBy('loyalty_card.card_number', $order);
break;
case 'station':
$query->select(DB::raw('ratings.*,description'));
$query->leftJoin('station', 'station.station_id', '=','ratings.station_id');
$query->orderBy('station.description', $order);
break;
case 'invoice':
$query->leftJoin('payments', 'payments.payment_id', '=','payments.payment_id');
$query->orderBy('payments.item_number', $order);
break;
default:
return $query->orderBy($field, $order);
}
}
}