File: /var/www/html/orbidirectory.com/app/Models/Transporter.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class Transporter extends Model implements HasMedia
{
protected $table = 'transporters';
use HasFactory, InteractsWithMedia;
const service_type = [
'intracity' => 'Intracity',
'intercity' => 'Intercity',
'both' => 'Both',
];
const status = [
1 => 'Active',
0 => 'Inactive',
2 => 'Banned',
];
const type = [
1 => 'Admin',
2 => 'Transporters',
3 => 'Hotels',
];
const STATUS_INACTIVE = 0;
const STATUS_ACTIVE = 1;
const STATUS_BANNED = 2;
const VERIFIED_NO = 0;
const VERIFIED_YES = 1;
public function getCitiesAttribute()
{
if (!$this->service_city) {
return collect(); // Return empty collection if no cities
}
$cityIds = explode(',', $this->service_city);
return CitySelection::whereIn('id', $cityIds)->get();
}
public function get_city()
{
return $this->belongsTo(City::class, 'service_city', 'id');
}
public function get_cities()
{
return $this->getCitiesAttribute();
}
public function get_user()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
public function languages()
{
return $this->hasMany(languages::class, 'transporter_id', 'id');
}
public static function getVehicles($make_id, $model_id, $service_area)
{
$query = Vehicles::query();
$query->join('transporters', 'vehicles.transporter_id', '=', 'transporters.id');
$query->where('vehicles.make_id', $make_id);
$query->where('vehicles.model_id', $model_id);
$query->where('transporters.service_area', 'like', '%' . $service_area . '%');
$vehicles = $query->get();
return $vehicles;
}
public function vehicle() {
return $this->hasMany(Vehicles::class);
}
public function cargoVehicle() {
return $this->hasMany(CargoVehicle::class);
}
public function city()
{
return $this->belongsTo(CitySelection::class, 'city_id');
}
public function vehicles()
{
return $this->hasMany(Vehicles::class, 'transporter_id');
}
public function registerMediaCollections(): void
{
$this->addMediaCollection('transporter_image')->singleFile();
}
}