Я очень новичок в Laravel и Eloquent, и я пытаюсь определить модель данных для записи из нее.Querying model, основанная на сложных отношениях
Я следующие таблицы
- пользователь
- задача
- user_id
- tasks_state
- user_id
- TASK_ID
- состояние
В основном каждый пользователь может создать несколько задач, и каждая задача принадлежит ровно один пользователь. Тогда каждая задача может иметь несколько состояний задачи для каждого пользователя, который взаимодействует с ним. (Как и задачи рассматривается (другим пользователем) или аналогично)
Я определил модели следующим образом:
Модель Пользователь:
class User extends Model {
public function tasksState(){
return $this->hasMany('App\TaskState');
}
public function tasks(){
return $this->hasMany('App\Task');
}
}
Задача Модель
class Task extends Model {
public function user(){
return $this->belongsTo('App\User');
}
public function tasksState(){
return $this->hasMany('App\TaskState');
}
}
Состояние задачи Состояние
class TaskState extends Model {
public function user(){
return $this->belongsTo('App\User');
}
public function task(){
return $this->belongsTo('App\Task');
}
}
Затем, когда я вставляю состояние задачи, я делаю это следующим образом: (Правильно ли это?)
$task_viewed = new TaskState();
$task_viewed->state = $state;
$task_viewed->user_id = $user->id;
$task->tasksState()->save($task_viewed);
Теперь я столкнулся вопрос: как извлечь все задачи для конкретного пользователь, который не был создан им, и он не взаимодействовал с ними - либо нет записи в таблице tasks_state, либо в состоянии задачи == 0.
Я также думаю, что, возможно, отношения между моделями неверны?
Не должно быть возможно сделать это в качестве одного запроса к базе данных вместо двух? Это кажется немного неэффективным ... – user3559787
Второе решение больше похоже на то, что я ищу :-) Однако есть еще один вопрос. Теперь я думаю, что способ, которым я определял модели, должен был быть многим многим в случае таблицы tasks_state. Разве вы так не думаете? Также это облегчит решение? Я только что увидел пример с «красной» красноречивой функцией. – user3559787
Я не знаю, что такое ваша структура данных, поэтому я не могу точно сказать, но это выглядит как отношение «многие ко многим», где 'tasks_state' является сводной таблицей. Если пользователь может взаимодействовать со многими задачами, и у каждой задачи много пользователей, то это много-ко-многим. –