我的数据库中有这种表
User (id, name)
UserHasTask (id, active, user_id, task_id, test)
Task (id, name)
因此,对于一个用户,我可以检索所有任务,无论是否有效。 当我编辑任务时,它将针对归因于用户的任务的每个参考进行更改(我使用类似任务模板的工作)。
我想做以下事情:
当UserHasTask->test
不为空时,我希望发生任务名称的值。
所以,如果我有:
User(10, 'John')
UserHasTask(20, 1, 10, 5, 'my_value')
Task(5, 'Task n°5')
查询User::find(10)->getTaskByID(20)->task->name
应该给我Task n°5my_value
我目前在UserHasTask
public function name()
{
$name = $this->task->name;
if(isset($this->test))
return $name . $this->test
return $name;
}
但是我被迫这样做User::find(10)->getTaskByID(20)->name()
而不是User::find(10)->getTaskByID(20)->task->name
答案 0 :(得分:0)
使用hasManyThrough关系:
参考laravel doc https://laravel.com/docs/5.6/eloquent-relationships#has-many-through
您可以指定中间UserHasTask表
答案 1 :(得分:0)
你应该试试这个
在用户模型中
public function tasks()
{
return $this->belongsToMany(Task::class, 'UserHasTask');
}
在控制器中
$user_tasks = User::find($user_id)->tasks; // all tasks assign to user
$task_name = array();
foreach($user_tasks as $user_task){
$task_name[] = $user_task->name;
}