gpt4 book ai didi

php - 获取 laravel 中每个服务器的最新状态

转载 作者:行者123 更新时间:2023-11-29 17:24:33 25 4
gpt4 key购买 nike

我正在使用 Eloquent 查询构建器,我正在尝试获取每个服务器的最新状态,我有一个 servers与我的 server_statuses 有一对多关系的表 table 。我当前的“解决方案”基于 laracon 在线高级 Eloquent 演示,但它没有从我的数据库返回任何内容,下面附有我的服务器模型、AppServiceProvider 和 Controller 。

我在这里做错了什么?我似乎无法弄清楚。

Controller :

$recent = Server::WithLastStatusDate()
->OrderBy('server_id');

型号:

public function scopeWithLastStatusDate($query){

$query ->addSubSelect('last_status_date', ServerStatus::select('created_at')
->whereRaw('server_id = servers.id')
->latest()
);
}

应用服务提供者:

Builder::macro('addSubSelect', function ($column, $query) {
if (is_null($this->getQuery()->columns)) {
$this->select($this->getQuery()->from.'.*');
}

return $this->selectSub($query->limit(1)->getQuery(), $column);
});

再次感谢您的帮助,感谢您的宝贵时间!

编辑:::

我不是最擅长原始 sql,但这是前一个应该在原始 sql 中的内容。

SELECT "servers".*, (SELECT "created_at" FROM "server_statuses" WHERE server_id = servers.id ORDER by "created_at" DESC LIMIT 1) as "last_server_status" FROM "servers" ORDER BY servers.id

我下载并使用了工具 debugbar,似乎数据库查询根本没有被执行。

enter image description here

编辑2::现在更改了模型和 Controller ,我正在获取所有公共(public)服务器,但它也返回没有状态的服务器。

模型更新:

public function scopeWithLastStatusDate($query){

$query->addSubSelect('last_status_date', ServerStatus::select('servers.name')
->whereRaw('server_id = servers.id')
->latest()
);
}

Controller 更新:

$servers = Server::WithLastStatusDate()
->OrderBy('servers.id')
->where('servers.isPublic', '=', 1)
->get();

最佳答案

我通过编辑原始帖子发布了解决方案

关于php - 获取 laravel 中每个服务器的最新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51044137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com