Как получить все данные из трех таблиц в соответствии с групповым значением поля второй таблицы, используя красноречивый запрос Laravel? - PullRequest
2 голосов
/ 27 мая 2019

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

1.Employee Model

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 Model

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.Section model ....

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 ]

1 голос
/ 27 мая 2019

Попробуйте:

$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();

Вложенная готовая загрузка

0 голосов
/ 12 июня 2019

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

       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');
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...