У меня есть три модели с некоторыми методами, такими как

1. Модель работника

class Employee extends Model
{
    protected $fillable = [
       'employee_no','card_no','inactivedate', 'activedate', 'status',
     ];


    public function office(){
        return $this->hasOne(EmployeeOffice::class);
    }

    public function section(){
        return $this->belongsTo('App\Hrm\Section');
    }

}

Модель 2.EmployeeOffice

class EmployeeOffice extends Model
{
  $fillable = ['employee_id','section_id','line_id','join_date','gross','confirm_date'];

public function employee(){
    return $this->belongsTo(Employee::class);
 }

public function section(){
   return $this->belongsTo('App\Hrm\Section');
}

}

3. Модель раздела ....

class Section extends Model
{
    protected $fillable = ['name','description','status'];

  //
}

Мне нужна вся неактивная информация о сотруднике в соответствии с датой неактивности сотрудника (из модели сотрудника), а также вся информация о его офисе из модели EmployeeOffice и должна быть groupBy в соответствии с section_id , который (section_id в качестве внешнего ключа) доступен в модели EmployeeOffice.

Для этого я должен пойти с некоторым условием, как ..

 Employee::where('inactivedate','like','%'.$date.'%');
*And need all data from office and employee table 
*need section name and grouped by as section name from section model

***please suggest me how can i solve this problem ***
2
Ahmed Sohel 27 Май 2019 в 16:55

2 ответа

Лучший ответ

Я решил свою проблему этим ...

       if(Input::has('start') && Input::has('end')){
            $start = Carbon::parse(Input::get('start'))->startOfDay();
            $end = Carbon::parse(Input::get('end'))->endOfDay();

            $start = $start->format('Y-m-d');
            $end =  $end->format('Y-m-d');

           EmployeeOffice::query()->whereHas('employee',function ($query) use ($start,$end){
                $query->whereBetween('inactivedate',[$start, $end])->where('status',0);
            })->paginate()->groupBy('section_id');
        }
0
Ahmed Sohel 12 Июн 2019 в 06:25

Попробуй это:

$data = Section::with(
    array(
        'employeeOffice' => function(
            $query->with(
                'employees' => function(
                    $query->where('employees.inactivatedate', 'like', '%'.$date.'%'
                    )
            )
        )
    )
)
->get();

Это должно дать вам массив для каждого section_id. В этом массиве находятся employeeOffice s (отношение 1: n). Второй запрос с with будет извлекаться для каждого employeeOffice сотрудника, который в нем сидит.

Но если вы правильно определили отношения, это должно помочь:

Section::with('EmployeeOffice.Employee')->get();

Nested Eager Загрузка

1
liqSTAR 4 Июн 2019 в 13:34