В моем приложении Laravel5 у меня есть пользователи, задачи и user_tasks. Пользователь может выполнить задачу несколько раз:
User:
id
name
...
Task:
id
name
value
...
UserTask:
id
user_id
task_id
completed_on
Если бы это было нормальное отношение «многие ко многим», я бы использовал эту функцию в классе пользователя:
class User extends Model {
// ...
public function tasks(){
return $this->belongsToMany(Task::class, 'user_tasks', 'user_id', 'task_id');
}
}
Но я считаю, что это означает, что user_id / task_id является первичным ключом для user_tasks. Как мне изменить отношения между Задачей и Пользователем, если я хочу, чтобы в таблице соединений были дублированные записи user_id / task_id?
Второй вопрос: что если я хочу получить список всех уникальных задач, которые пользователь выполнил, независимо от того, сколько раз пользователь их выполнил?
РЕДАКТИРОВАТЬ: Извините, я не пытался иметь в виду, что это поместит уникальный ключ в эти столбцы. Я имел в виду, что кажется, что ownToMany следует использовать в ситуации, когда существует только одно соединение между любой парой объектов User и Task, поэтому ситуации, когда user_id / task_id может быть уникальным ключом.
Задача ещё не решена.
Других решений пока нет …