首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多到多,急着装货的拉拉

多到多,急着装货的拉拉
EN

Stack Overflow用户
提问于 2014-10-04 21:56:34
回答 1查看 96关注 0票数 0

我有一个任务管理器,每个用户都可以分配任务。我有这4个数据库(我只显示讨论所需的列)

用户:

代码语言:javascript
复制
--------------------------
|   id   |   username      |  
---------------------------
|   1    |    peterg      |    
 ----------------------------
|   2    |     louisg        |      
----------------------------

任务:

代码语言:javascript
复制
-----------------------------------------------------
|   id   |     title        |     project_id         |
------------------------------------------------------
|   1    |   Finsih hw       |          1           |
 ---------------------------------------------------
|   2    |      cut grass       |       4         |
----------------------------------------------------

用户和任务user_task的枢轴表:

代码语言:javascript
复制
----------------------------------------------
|   id   |   task_id     |     user_id      |
---------------------------------------------
|   1    |       1       |      1          |
 --------------------------------------------
|   2    |      1        |      2         |
---------------------------------------------
|   1    |       2       |      2         |
 --------------------------------------------
|   1    |       2       |      4          |
 --------------------------------------------

最后,我的项目表:

代码语言:javascript
复制
---------------------------
|   id   |      title         |
-----------------------------
|   1    |    first_title     |
 ---------------------------
|   2    |     second_title     |   
------------------------------

下面是与任务的用户关系

代码语言:javascript
复制
public function assignedTasks()
{
    return $this->belongsToMany('RL\Tasks\Task', 'user_task')
        ->orderBy('priority', 'ASC')
        ->orderBY('created_at', 'DESC')
        ->where('stage', '=', 1);
}

显示此页面的Laravel路由是/{username}/assigned-task,所以当该路由被击中时,有一个服务类,该服务类获取该用户的所有任务

代码语言:javascript
复制
public function assignedTasks($username)
{
    $user = $this->member->getUserIdByUsername($username);

    if(!$user) throw new UsernameNotFoundException;

    $tasks = $user->assignedTasks;

    return $tasks;
}

我的html来分解分配的任务:

代码语言:javascript
复制
<div id="assignments">
@foreach(array_chunk($tasks->all(), 3) as $row)
        <div class="row">
        <?php $task_id = [];?>
            @foreach($row as $task)
                <div class="col-md-4">
                    <div class="panel panel-default">
                      <div class="panel-heading">
                        <h3 class="panel-title">{{$task->title}}.</h3>
                      </div>
                      <div class="panel-body">
                        <p>{{$task->description}}</p>
                        <p><strong>Project: </strong>{{$task->project->title}}</p>
                        <p class=""><strong>Priority: </strong>{{$task->priority}}</p>
                        <p class="right"><strong>Stage: </strong>{{$task->stage}}</p>
                        <a href="">Details</a>
                      </div>
                    </div>
                </div>
            @endforeach
        </div>
    @endforeach
</div>

这很好,但是当我检查SQL时,我注意到每次尝试{{$task->project->title}}时都会运行select * from项目,所以如果我有50个已分配的任务,这是sql运行的50倍。我怎样才能在多到多关系中加载项目?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-04 22:09:33

您必须在getUserIdByUsername($username);方法中使用急切的加载。

例如,它看起来就像

代码语言:javascript
复制
User::with('tasks')->where('username',$username)->get(); 

现在,当您调用$tasks = $user->assignedTasks;时,它将只获取一次数据。

读取文档热切的正在加载

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26197590

复制
相关文章

相似问题

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