MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/.trash/app.1/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 ;
    }
}