laravel5,连接两个单独的查询调用?

hzbexzde  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(290)

是否可以连接两个单独的查询调用?更具体地说,是不是可以加入 $servers 以及 $applications ?

$servers = Server::select('servers.*', 'statuses.status as status_name')
->leftJoin('server_statuses', function($join) {
    $join->on('server_statuses.server_id', '=', 'servers.id')
        ->where('server_statuses.id', function($query) {
            $query->select('id')
                ->from('server_statuses')
                ->whereColumn('server_id', 'servers.id')
                ->latest()
                ->limit(1);
        });
})
->leftJoin('statuses', 'statuses.id', '=', 'server_statuses.status_id')
->where('servers.isPublic', '=', 1)
->orderBy('servers.id', 'desc')
->get();

$applications = Apps::join('app_servers', 'apps.id', '=', 'app_servers.app_id')
->get();

这个 $servers 查询正在执行此sql语句:

select `servers`.*, `statuses`.`status` as `status_name` from `servers` left join `server_statuses` on `server_statuses`.`server_id` = `servers`.`id` and `server_statuses`.`id` = (select `id` from `server_statuses` where `server_id` = `servers`.`id` order by `created_at` desc limit 1) left join `statuses` on `statuses`.`id` = `server_statuses`.`status_id` where `servers`.`isPublic` = '1' order by `servers`.`id` desc

我在努力避免再次提出复杂的问题。我试着运行一个联合,但得到了一个绑定错误,我也试着做如下的事情,但没有给我预期的结果。

foreach($servers as $server){
    $applications->add($server);
}

$test = $applications->toarray();

dd($test);

如果可能的话,有人知道我该怎么做吗?还是我要对所有5个表进行查询?
(如果需要,将发布迁移)
编辑:
为了清楚起见,我正试图得到 status 服务器的列 $servers 在应用程序联接表中查询。

gzjq41n4

gzjq41n41#

用这个查询解决了。

$applications = Apps::select('apps.*')
            ->join('app_servers', 'app_servers.app_id', '=', 'apps.id')
            ->leftjoin('servers', 'app_servers.server_id', '=', 'servers.id')
            ->select('servers.*', 'statuses.status as status_name')
            ->leftJoin('server_statuses', function($join) {
                $join->on('server_statuses.server_id', '=', 'servers.id')
                    ->where('server_statuses.id', function($query) {
                        $query->select('id')
                            ->from('server_statuses')
                            ->whereColumn('server_id', 'servers.id')
                            ->latest()
                            ->limit(1);
                    });
        })
        ->leftJoin('statuses', 'statuses.id', '=', 'server_statuses.status_id')
        ->select('apps.id', 'servers.id', 'apps.name', 'statuses.status', 'servers.name as sn', 'server_statuses.created_at')
        ->orderBy('apps.id', 'desc')
        ->get();

相关问题