Laravel如何将两个查询结果合并为单个对象

Pen*_*ers 3 php backend object laravel laravel-5

我目前仍然坚持如何将两个查询结果合并到单个对象下面是我的代码.

EDITED

模型方法

public static function getTeamStats($competitionId, $teamId) {
    return TeamCompetitionStatistics::where('competitionId', $competitionId)
        ->where('teamid', $teamId)
        ->where('periodNumber', 0)
        ->get();
}

public static function getTeamPosition($competitionId, $teamId){
    return self::where('latest', 1)
        ->where('competitionId',$competitionId)
        ->where('competitorId', $teamId)
        ->get(['position', 'streak'])
        ->map(function($item, $key){
            $item->position = $item->position . date("S", mktime(0, 0, 0, 0, $item->position, 0));
            if(strpos($item->streak, '-') !== FALSE) {
                $item->streak = str_replace('-', 'L', $item->streak);
            }
            else {
                $item->streak = 'W'.$item->streak;
            }
            return $item;
        });
}
Run Code Online (Sandbox Code Playgroud)

在控制器中获取值

$teamStanding = Ladder::getTeamPosition($request->competitionId, $request->id);
$teamStatistics = TeamCompetitionStatistics::getTeamStats($request->competitionId, $request->id);

$result = $teamStatistics->merge($teamStanding);
Run Code Online (Sandbox Code Playgroud)

返回结果: [{'teamstanding': 'data'}, {'teamstatictics': 'data'}]

预期产量: [{'teamstanding': 'data', 'teamstatictics': 'data'}]

Jak*_*ain 18

你可以使用all()函数.

$teamStanding = Ladder::getTeamPosition($request->competitionId, $request->id)->get();

$teamStatistics = TeamCompetitionStatistics::getTeamStats($request->competitionId, $request->id)->get();

$merged = $teamStatistics->merge($teamStanding);

$result = $merged->all();

// return [{'teamstanding': 'data', 'teamstatictics': 'data'}]
Run Code Online (Sandbox Code Playgroud)

  • 我已经从模型中更新了添加代码的方法,我使用了您的解决方案,但不起作用 (2认同)

Hir*_*ana 7

尝试 merge()

合并方法合并给定的数组或集合与原始集合。

$first = ModelName::where('<fieldName>','<searchText>')
        ->get();
$second = Album::where('<fieldName>','<searchText>')
    ->get();

$finalResult = $first->merge($second);

$finalResult->each(function($record)
{
    echo $record-><fieldName>.'<br />';
});
Run Code Online (Sandbox Code Playgroud)


小智 6

添加我的答案,因为上述解决方案对我来说不太有效,两者都只是将两个单独的对象添加到一个数组中:{"Name":"A Name"},{"Surname":"A Surname"}。我必须先收集我的阵列并使用。

https://laravel.com/docs/5.4/collections#method-merge

$first  = $modelone->where('Id', '1')->first(['Name']);
$second = $modeltwo->where('Thing', '1')->first(['Surname']);

    $collection = collect($first);
    $merged     = $collection->merge($second);
    $result[]   = $merged->all();
    return $result;
//output: [{"Name":"A Name","Surname":"A Surname"}]
Run Code Online (Sandbox Code Playgroud)