首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel:用模型为关系字段添加内容

Laravel:用模型为关系字段添加内容
EN

Stack Overflow用户
提问于 2018-04-11 07:44:04
回答 2查看 35关注 0票数 0

我的数据库里有这样一张桌子

代码语言:javascript
复制
User (id, name) 
UserHasTask (id, active, user_id, task_id, test)
Task (id, name)

因此,对于一个用户,我可以检索所有任务,活动与否。当我编辑一个任务时,这个任务的每一个引用都会被更改(我使用类似于任务模板的内容)。

我想做以下工作:当UserHasTask->test不是null时,我想要对任务的名称执行这个值。

所以如果我有:

代码语言:javascript
复制
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中使用这个函数

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2018-04-11 07:52:45

使用hasManyThrough关系:

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

可以指定中间UserHasTask表。

票数 0
EN

Stack Overflow用户

发布于 2018-04-11 07:53:59

你应该试试这个

在用户模型中的应用

代码语言:javascript
复制
public function tasks()
{
    return $this->belongsToMany(Task::class, 'UserHasTask');
}

控制器中的

代码语言:javascript
复制
$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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49769291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档