'integer', 'location_id' => 'integer', 'company_id' => 'integer', ]; protected $rules = [ 'name' => 'required|max:255|is_unique_department', 'location_id' => 'numeric|nullable', 'company_id' => 'numeric|nullable', 'manager_id' => 'numeric|nullable', ]; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'created_by', 'name', 'phone', 'fax', 'location_id', 'company_id', 'manager_id', 'notes', ]; use Searchable; /** * The attributes that should be included when searching the model. * * @var array */ protected $searchableAttributes = ['name', 'notes', 'phone', 'fax']; /** * The relations and their attributes that should be included when searching the model. * * @var array */ protected $searchableRelations = []; /** * Establishes the department -> company relationship * * @author A. Gianotto * @since [v4.0] * @return \Illuminate\Database\Eloquent\Relations\Relation */ public function company() { return $this->belongsTo(\App\Models\Company::class, 'company_id'); } /** * Establishes the department -> users relationship * * @author A. Gianotto * @since [v4.0] * @return \Illuminate\Database\Eloquent\Relations\Relation */ public function users() { return $this->hasMany(\App\Models\User::class, 'department_id'); } /** * Establishes the department -> manager relationship * * @author A. Gianotto * @since [v4.0] * @return \Illuminate\Database\Eloquent\Relations\Relation */ public function manager() { return $this->belongsTo(\App\Models\User::class, 'manager_id'); } /** * Establishes the department -> location relationship * * @author A. Gianotto * @since [v4.0] * @return \Illuminate\Database\Eloquent\Relations\Relation */ public function location() { return $this->belongsTo(\App\Models\Location::class, 'location_id'); } /** * Query builder scope to order on location name * * @param \Illuminate\Database\Query\Builder $query Query builder instance * @param text $order Order * * @return \Illuminate\Database\Query\Builder Modified query builder */ public function scopeOrderLocation($query, $order) { return $query->leftJoin('locations as department_location', 'departments.location_id', '=', 'department_location.id')->orderBy('department_location.name', $order); } /** * Query builder scope to order on manager name * * @param \Illuminate\Database\Query\Builder $query Query builder instance * @param text $order Order * * @return \Illuminate\Database\Query\Builder Modified query builder */ public function scopeOrderManager($query, $order) { return $query->leftJoin('users as department_user', 'departments.manager_id', '=', 'department_user.id')->orderBy('department_user.first_name', $order)->orderBy('department_user.last_name', $order); } }