Laravel - Как обновить таблицу сотрудников по условию - PullRequest
0 голосов
/ 17 июня 2020

В моем проекте Laravel -5.8 у меня есть эти две модели:

class Employee extends Model
{
    protected $table = 'employees';

    protected $primaryKey = 'id';

    protected $fillable = [
          'id',
          'first_name',
          'last_name',
     'dept_code',
      'department_id',
          'is_updated',
      ];
 }

class Department extends Model
{
    protected $table = 'departments';

    protected $primaryKey = 'id';

    protected $fillable = [
          'id',
          'department_code',
      ];
 }

Я хочу сделать следующее:

  1. Я хочу выбрать всех сотрудников, у которых is_updated = 0
  2. Выберите dept_code из 1 выше и сравните его с кодом_отдела в таблице отделов. Затем выберите соответствующий идентификатор таблицы отделов
  3. обновите Department_id в каждой таблице сотрудников со значением id в 2 выше. а также установите is_updated = 1

    public function handle()
    {
     $employeeid = Employee::where('is_updated', 0)->where('company_id', 1)->pluck('id');
     $employees = Employee::whereIn('id', $employeeid)->get();
     $employedept = Employee::where('company_id', 1)->get();
    
     foreach ($employees as $employee) {
    
        $departments = Department::select('id')->where('dept_code', $employee->dept_id)->where('company_id', 1)->first();
    
         $employedept->update([
             'department_id' => $departments->id
             'is_updated'   => 1,
                ]);
    }
    

Как мне завершить приведенный выше код, чтобы достичь этого?

Спасибо

1 Ответ

0 голосов
/ 17 июня 2020

Вы можете попробовать следующее:

function handle()
{
    $dept_codes = Employee::where('is_updated', 0)->where('company_id', 1)->pluck('dept_code')->toArray();
    $departments = Department::whereIn('department_code', $dept_codes)->where('company_id', 1)->get();
    foreach ($departments as $d) {
        Employee::where('dept_code', $d->department_code)
            ->where('company_id', 1)
            ->update(['department_id' => $d->id, 'is_updated' => 1]);
    }    
}

Я немного оптимизировал запросы, чтобы не запрашивать базу данных на каждой итерации, а также уменьшил количество обновлений в таблице сотрудников.

Пусть я знаю, есть ли у вас вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...