【问题标题】:Merge two eloquent collections in Laravel在 Laravel 中合并两个雄辩的集合
【发布时间】:2017-05-07 07:48:09
【问题描述】:

我有一个允许用户创建项目和分配任务的系统。现在我正在尝试确定一个视图以显示由当前用户创建或分配给当前用户的所有项目。我用三个表usersprojectsproject_user 建立了多对多关系。项目表有一个列 user_id 表示谁“拥有”它。

我尝试将merge method 用于基于this question 的集合,但我无法让它工作。

$projects = new \Illuminate\Database\Eloquent\Collection();

$userProjects = Project::where(array('company_id' => Auth::user()->company_id, 'user_id' => Auth::user()->id))
        ->orderBy('created_at', 'asc')
        ->get();


//foreach($userProjects as $up){
    $projects = $projects->merge($userProjects);
//}

$assignedProjects = User::where('id', Auth::user()->id)->with('project')->orderBy('created_at', 'asc')->get();

foreach($assignedProjects as $assigned){
    $projects = $projects->merge($assigned->project);
}
dd($projects->all());

然后我尝试转换为数组,然后手动创建了一个对象,但这也没有用,我担心资源问题。

$userProjects = Project::where(array('company_id' => Auth::user()->company_id, 'user_id' => Auth::user()->id))
        ->orderBy('created_at', 'asc')
        ->get()->toArray();
$assignedProjects = User::where('id', Auth::user()->id)->with('project')->orderBy('created_at', 'asc')->get()->toArray();
$projects = array_merge((array) $userProjects, (array) $assignedProjects[0]['project']);
$cleaned = array_unique($projects, SORT_REGULAR);
$merge = array('projects' => (object) $cleaned);
$projects = (object) $merge;

dd($projects);

这是用户集合,但我只需要其中的项目关系

这是项目集合

目标是以某种方式将这些组合到集合中,以便我可以使用 $project->title 从视图访问它(例如)。

当我刚刚为用户“拥有”的项目执行此操作时,它工作正常,现在我如何让它工作以显示用户拥有的项目和分配给用户的项目? p>

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你正在寻找whereHas方法:

    $allUserProjects = Project::whereHas('users', function ($query) {
            // you can replace 'id' column by 'users.id' for clarity
            $query->where('id', Auth::user()->id); 
        })
        ->orWhere(function ($query) {
                $query->where('company_id', Auth::user()->company_id)
                      ->where('user_id', Auth::user()->id);
        })
        ->orderBy('created_at', 'asc')
        ->get();
    

    【讨论】:

    • 你太棒了,轻松多了,非常感谢!对于其他寻找此上下文的人,这里是链接:laravel.com/docs/5.4/…
    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 2013-09-08
    • 2015-11-01
    • 2018-11-04
    • 1970-01-01
    相关资源
    最近更新 更多