Laravel:使用模型

时间:2018-04-11 07:44:04

标签: laravel model

我的数据库中有这种表

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

2 个答案:

答案 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;
}