Laravel отношения с составными внешними ключами - PullRequest
0 голосов
/ 29 апреля 2020

Вот чего я хочу достичь: у нас есть персонал, и у каждого персонала может быть одна должность для отдела, а также одно назначение для отдела и несколько дополнительных Плата для нескольких отделов, один отдел на Дополнительная плата . И я хочу сохранить все обязанности в таблице staff_responsibilities

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

  • id
  • name
  • email

Тогда у меня есть staff_responsibilities таблица со следующими столбцами:

  • staff_id
  • designation_id
  • Department_id
  • liability_type_id

Типы ответственности могут быть Position и Additional Charge, и один сотрудник может иметь несколько назначений с Additional Charge ответственностью.

Тогда у меня есть responsibility_types таблица со следующими столбцами:

  • id
  • name

// I have no way to tell this relationship to look for a responsibility type 2 (2 is the id of the responsibility called `Designation`) 

public function designation()
    {
        return $this->hasOne(StaffResponsibility::class);
    }

// I have no way to tell this relationship to look for a responsibility type 2 
    public function position()
    {
        return $this->hasOne(StaffResponsibility::class);
    }

// Gives error: Syntax error or access violation: 1066 Not unique table/alias: 'staff_responsibilities' 
    public function additionalCharges()
    {
        return $this->belongsToMany(StaffResponsibility::class, 'staff_responsibilities','designation_id');
    }

Любая помощь будет по достоинству оценена.

таблица штатных сотрудников

staff_responsibilities

таблица типов ответственности

responsibility_types table

таблица обозначений

designations table

1 Ответ

1 голос
/ 29 апреля 2020

Вот чего я хочу добиться: у нас есть Персонал, и у каждого сотрудника может быть одна должность для отдела, а также одно Назначение для отдела и несколько дополнительных сборов для нескольких отделов, по одному отделу на дополнительный сбор.

Мне кажется, что было бы полезно создать модель для Позиция , Обозначение и Дополнительные расходы . Такое чувство, что вам может потребоваться нормализовать вашу базу данных или изменить staff_responsibilities как сводную таблицу .

Но трудно сказать, не зная вашего приложения.

Чтобы ответить на ваш вопрос, вы можете добавить несколько областей в StaffResponsibility

class StaffResponsibility extends Model{

    public function scopeDesignation($query)
    {
        return $query->where('responsibility_type_id','=',2);
    }

}

и использовать их

public function designation()
{
    return $this->hasOne(StaffResponsibility::class)->designation();
}

И последнее - отношение hasMany, а не многие в соответствии с тем, что вы написали:

public function additionalCharges()
{
    return $this->belongsTo(StaffResponsibility::class, 'staff_responsibilities','designation_id')->additionalCharges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...