Laravel Отношения многие ко многим с пользовательским отношением ключа - PullRequest
0 голосов
/ 04 сентября 2018

Прежде чем пометить этот вопрос как дубликат, пожалуйста, ознакомьтесь с деталями :) У меня есть проблема, связанная с отношением многие ко многим со связью пользовательских столбцов

У меня есть следующие таблицы

Сотрудники

 -Id
 -brink_id <----- This is third party id I am saving of employee
 -name

Работа

-id
-brink_id <----- This is third party id I am saving of job
-description

employee_job

-id
-brink_id <----- This is third party id I am saving of relationship for third party
-brink_employee_id
-brink_job_id

В модели сотрудника я создал отношения

public function jobs()
{
    return $this->belongsToMany('App\Models\Job','employee_job','brink_employee_id','brink_job_id');
}

И в Джобсе Модель

/**
 * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
 */
public function employees()
{
    return $this->belongsToMany('App\Models\Employee','employee_job','brink_job_id','brink_employee_id');
}

На самом деле я хочу, чтобы отношения "многие ко многим" были представлены с brink_id in employees table и brink_id in jobs table в виде таблицы brink_employee_id, brink_job_id in employee_job без идентификатора (первичные столбцы соответствующей таблицы).

Но когда я пытаюсь вставить в сводную таблицу, используя следующую, она всегда вставляет идентификатор сотрудника, а не brink_id

  $employee = Employee::with('jobs')->where('brink_id',$employeeJob['brink_employee_id'])->first();

  $employee->jobs()->attach($employeeJob['brink_job_id'], ['is_active' => 1]);

Например, если brink_id в таблице сотрудников равно 123456, а ID равен 1, код выше в employee_table будет хранить 1 в employee_brink_id, а не 123456.

Пожалуйста, дайте мне знать, что я делаю неправильно.

1 Ответ

0 голосов
/ 04 сентября 2018

Если вы не укажете другой родительский ключ и связанный ключ, по умолчанию будет использоваться первичный ключ вашей текущей модели и первичный ключ связанной модели соответственно.

Укажите имя родительского ключа в качестве 5-го аргумента и имя связанного ключа в качестве 6-го аргумента:

return $this->belongsToMany('App\Models\Employee', 'employee_job', 'brink_job_id', 'brink_employee_id', 'brink_id', 'brink_id');

Однако я лично буду использовать идентификаторы из вашей системы, а не идентификаторы из сторонней системы в ваших отношениях.

...