Worker.php 3.86 KB
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Worker extends Model
{
    use HasFactory;

    protected $table = 'workers';

    protected $fillable = [
        'user_id',
        'status_work',
        'position_work',
        'positions_work',
        'telephone',
        'telephone2',
        'persent_anketa',
        'photo',
        'email_data',
        'status_profile',
        'old_year',
        'experience',
        'en_is',
        'education',
        'email',
        'interpassport',
        'mk',
        'vvp',
        'vlm',
        'reka_diplom',
        'more_diplom',
        'mpss',
        'tanker',
        'gmssb',
        'resume',
        'sort',
        'updated_at',
        'text',
        'address',
        'city',
        'coord',
        'file',
        'is_remove',
        'favorite_user',
        'sroch_user',
        'salary_expectations',
        'english_level',
        'ready_boart_date',
        'boart_type_preference',
        'visa_available',
        'tanker_documents_available',
        'confirmation_work_for_vvp',
        'military_id_available',
        'comment'
    ];

    /**
     * Получить значение поля positions_work как массив.
     *
     * @param  string  $value
     * @return array
     */
    public function getPositionsWorkAttribute($value)
    {
        return json_decode($value, true);
    }

    /**
     * Установить значение поля positions_work как JSON.
     *
     * @param  array|string  $value
     * @return void
     */
    public function setPositionsWorkAttribute($value)
    {
        $this->attributes['positions_work'] = is_array($value) ? json_encode($value) : $value;
    }

    /*
     * Связь таблицы users с таблицей workers
    */
    public function users() {
        return $this->belongsTo(User::class, 'user_id');
    }

    // Связь Работника с сертификами (0-0 - 1)
    public function sertificate() {
        return $this->hasMany(sertification::class);
    }

    // Связь Работника с должностями (0-0 - 1)
    public function job_titles() {
        return $this->belongsToMany(Job_title::class, 'title_workers');
    }

    //Связь Работника с опытом работы (1 - 0-0)
    public function place_worker() {
        return $this->hasMany(place_works::class);
    }

    public function scopeActive($query) {
        return $query->where('is_remove', '=', '0');
    }

    //Связь Работника с предыдущими компаниями
    public function prev_company() {
        return $this->hasMany(PrevCompany::class);
    }

    //Связь Работника с инфоблоками (0-0 - 0-0)
    public function infobloks() {
        return $this->belongsToMany(
            infobloks::class,
            'dop_info',
            'worker_id',
            'infoblok_id'
        )->withPivot('status');
    }

    /*
   * Связь модели Работники (Workers) с моделью Вакансии работника (worker_jobs)
     один-ко-многим
   */
    public function worker_job() {
        return $this->hasMany(worker_jobs::class);
    }

    //Связи Работника с дополнительными
    public function dop_info() {
        return $this->hasMany(Dop_info::class, 'worker_id');
    }

    public function response() {
        return $this->hasMany(ResponseWork::class);
    }

    public function getJobsAttribute()
    {
        $job_titles_ids = json_decode($this->attributes['positions_work'], true);
        return Job_title::whereIn('id', $job_titles_ids)->get();
    }

    public function autoliftOptions()
    {
        return $this->hasOne(WorkerAutoliftOption::class);
    }
}