How to set active data provider in gridview

I’ve a problem to create a history contract.

I’ve table employee

id_number <pk>

name

dob

old_id

and contract

id <pk>

id_employee <fk>

join date

end date

if employee create new contract so he has new id_number. And then i want to display a history contract with gridview based of ‘old_id’ at table employee.

this my contract controller


public function actionView($id)

        {

        $employee = NULL;

        $employees = Employee::find()->indexBy('id_number')->orderBy('id_number')->all();

        

        $query = Contract::find();

        if ($id !== null && isset($employees[$id])){

            $employee = $employees[$id];

            $query->where(['id_employee' => $this->getEmployeeIds($employees, $id)]);

        }


$dataProvider = new ActiveDataProvider([

            'query' => $query,

            'pagination' => [

                'pageSize' => 6,

            ],

        ]);

        

        return $this->render('view', [

            'model' => $this ->findModel($id),

            'dataProvider' => $dataProvider,

        ]);

    }


private function getEmployeeIds($employees, $employeeId, &$employeeIds = [])

    {

        foreach ($employees as $employee) {

            if ($employee->id_number == $employeeId) {

                $employeeIds[] = $employee->id_number;

            }

            elseif ($employee->old_id == $employeeId) {

                $this->getEmployeeIds($employees, $employee->id_number, $employeeIds);

            }

        }

        return $employeeIds;

    }