У меня есть схема, в которой USER
находится в отношениях «многие ко многим» с TITLE
до DEGREE
:
USER -|--------||-> DEGREE <-||--------|- TITLE
--
# USER
-------------------
| id | user_name |
|----|------------|
| 1 | Anthony |
| 2 | Linda |
# TITLE
-------------------
| id | title_name |
|----|------------|
| 1 | bachelor |
| 2 | professor |
# DEGREE
primaryKey:[user_id, title_id, major, university]
---------------------------------------------------------------------
| user_id | title_id | major | university | year |
|---------|------------|------------|-------------------|-----------|
| 1 | 2 |biology | florida | 2012 |
| 2 | 1 |math | seoul | NULL |
| 2 | 1 |physics | tokyo | NULL |
| 1 | 2 |biology | hanoi | 2009 |
Как видите, первичный ключ DEGREE
представляет собой 4-кортеж. Следовательно, если комбинация значений этих полей первичного ключа уникальна, это допустимая запись. Я использовал сводную таблицу и правильно посмотрел на тестовый плагин OctoberCMS . Мне удается интегрировать частичное отношение DEGREE
в форму создания нового USER
.
/* Models\User.php */
public $belongsToMany = [
/*...*/
'degrees' => [
'Xyz\Xyz_plugin\Models\Title',
'table' => 'xyz_degree',
'key' => 'user_id',
'otherKey' => 'title_id',
'pivot' => ['major', 'university, 'year'],
'pivotModel' => 'Xyz\Xyz_plugin\Models\Degree' // optional
]
];
/* Models\Degree.php */
<?php namespace Xyz\Xyz_plugin\Models;
use October\Rain\Database\Pivot;
use Model;
class Degree extends Pivot
{
use \October\Rain\Database\Traits\Validation;
public $rules = [];
}
После добавления шаблона форм и столбцов для DEGREE
и настройки в контроллере USER
частичное отношение DEGREE
появилось в форме USER
. Я могу создать USER
с DEGREE
. Но проблема в том, что Октябрь не обнаружил, и он обрабатывает модель DEGREE
в виде 2-кортежно-первичного ключа [user_id, title_id]: я не могу добавить два DEGREE
с одинаковым названием, например, бакалавра, потому что он пропущен в списке TITLE
после создания первого DEGREE
. Я аккуратно следовал коду пользователей в тестовом плагине .
Я пробую другое мышление как реструктурирование схемы: USER
имеет много DEGREE
, а TITLE
имеет много DEGREE
. Проблема заключается в том, что необходимо добавить поле Id в DEGREE
, в то время как InnoDB не допускает автоинкрементное поле в составном ключе. В течение некоторого времени я хочу знать, каково правильное решение для такой схемы? Я считаю, что это общая проблема, но я не получаю достаточно хороший результат в Google. Любая помощь приветствуется.