2014-12-15 2 views
1

Мне нужно сохранить в базе данных еженедельный час пользователя. Например, пользователь A работает в понедельник с 8:00 до 17:00, во вторник с 9:00 до 11:00 ecc ...Отношение принадлежит к таблице с двойным первичным ключом в Laravel

Для этого я создал две таблицы: Пользователи (id, username) , ecc ...) Часы (user_id, день, начало, конец) с «user_id» и «day» в качестве первичного ключа.

Вместо того, чтобы создать другую таблицу под названием Дни с 7 записями (по одному на каждый день). Моя проблема заключается в определении отношения к laravel, действительно, если я использую три таблицы, я могу использовать отношение Many to Many, но если я использую эту форму, как я могу указать, что столбец «day» является ключом?

+0

Вместо «дня» в качестве первичного ключа используйте его, чтобы отметить день (int 1-7), может быть? – lukasgeiter

+0

Да, дневной столбец является целым числом, но моя проблема заключается в определении метода отношений. – user3482682

+0

Я только что прочитал полное название ... нет такой вещи, как двойной первичный ключ. говорят о составном ключе? – lukasgeiter

ответ

3

Я предлагаю следующую таблицу структуры Hours

id  (primary key, auto-increment) 
user_id 
day  (NOT primary key, values from 1-7) 
start 
end 

Затем вы можете добавить уникальный индекс по комбинации user_id и day.

SQL: ALTER TABLE hours ADD UNIQUE unique_user_day (user_id, day);

Laravel схемы строитель (миграция): $table->unique(array('user_id', 'day'));

После этого нужно просто нормальное отношение. Ничего особенного.

public function hours(){ 
    return $this->hasMany('Hours'); 
} 

Это, как вы получите все часы

$hours = Users::find(1)->hours; 

И тогда, когда вам нужен конкретный день, добавьте где заявление

$tuesday = Users::find(1)->hours()->where('day', 2)->get(); 

Или для более хорошего синтаксисом мог функции для вашей модели пользователей

public function day($number){ 
    return $this->hours()->where('day', $number)->get(); 
} 

$tuesday = Users::find(1)->day(2); 

Вы можете даже работать с константами в будние дни ...

+0

Прохладный! Не знал о $ table-> unique (array ('x', 'y')); возможность! –

+0

Да, к сожалению, это не в документации. Нашел, что он просматривает исходный код Laravels ... – lukasgeiter

Смежные вопросы