File: /home/imensosw/www/ezwork/app/Models/UserAvailability.php
<?php
/**
* UserAvailabilityModel class file
*
* PHP Version 7.2
*
* @category Model
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
namespace App\Models;
use DB ;
use Illuminate\Database\Eloquent\Model;
use App\Models\Day;
/**
* UserAvailabilityModel class
*
* The class manage User Availability related queries
*
* @category UserAvailabilityModel
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
class UserAvailability extends Model
{
public $table = "user_availabilitys";
public $fillable = ['user_id','day_id','time_slot_id'];
/**
* GetUserDayTimeSlots function gets the user's day time slots of specified
* user from storage and return the day time slots.
*
* @param \Illuminate\Http\Request request
* @return \App\Models\Day
*/
public static function getUserDayTimeSlots($request)
{
$user_id = $request['user_id'];
return Day::
select(
"days.id as day_id",
"days.day_l",
"time_slots.id as time_slot_id",
"time_slots.slot_name",
'user_availabilitys.id as user_availability_id'
)
->crossJoin('time_slots')
->leftJoin(
'user_availabilitys',
function ($join) use ($user_id) {
$join->on('user_availabilitys.day_id', '=', 'days.id')
->on('user_availabilitys.time_slot_id', '=', 'time_slots.id')
->where('user_availabilitys.user_id', '=', $user_id);
}
)
->get();
}
/**
* GetUserDayTimeSlots function gets the user's day time slots of specified
* userfrom storage and return the day time slots.
*
* @param \Illuminate\Http\Request request
* @return \App\Models\UserAvailability
*/
public static function getUserDayTimeSlotsPivote($request)
{
$userDayTimeSlots = UserAvailability::getUserDayTimeSlots($request);
$timeSlots = \App\Models\TimeSlot::all();
$userDayTimeSlotsPivote = [] ;
foreach ($timeSlots as $timeSlot) {
$timeSlotRow = ['time_slot_id' => $timeSlot->id,'time_slot_name' => $timeSlot->slot_name] ;
foreach ($userDayTimeSlots as $userDayTimeSlot) {
if ($timeSlot->id == $userDayTimeSlot->time_slot_id) {
$timeSlotRow["day_id_$userDayTimeSlot->day_id"] = $userDayTimeSlot->user_availability_id;
}
}
$userDayTimeSlotsPivote[] = $timeSlotRow;
}
return $userDayTimeSlotsPivote ;
}
}