【问题标题】:Laravel: Adding content to relationship's field with modelLaravel:使用模型向关系字段添加内容
【发布时间】:2018-04-11 15:57:19
【问题描述】:

我的数据库中有这样的表

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

【问题讨论】:

  • 您想添加您的代码作为参考吗?

标签: laravel model


【解决方案1】:

使用 hasManyThrough 关系:

参考 laravel 文档 https://laravel.com/docs/5.6/eloquent-relationships#has-many-through

您可以指定中间的 UserHasTask 表

【讨论】:

    【解决方案2】:

    你应该试试这个

    在用户模型中

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

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 2015-12-09
      • 2016-09-26
      • 2020-03-09
      • 2016-11-01
      • 2013-04-22
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多