【发布时间】:2017-06-02 23:35:16
【问题描述】:
我在通知和alerFrequencies 表之间有一对多的关系。他们有两者的模型。我编写了这个函数来从alerFrequencies 表中提取所有最新的created_at 时间戳。
例如,如果我的通知表中有一个网站在警报表中有created_at 时间戳,它应该只返回最新的时间戳。如果通知表中有 2 个具有不同时间戳的网站,它应该返回这 2 个网站的时间戳。
无论通知表中有多少网站,它都只返回最新的。如果有人对编写查询有更好的想法,我将不胜感激各种帮助和建议。
public function alert(){
$alert_timestamp = AlertFrequency::with('notification')->select('created_at')->groupBy('created_at')->orderBy('created_at','DESC')->first();
$alert_timestamp=$alert_timestamp->created_at->toDateTimeString();
if($alert_timestamp==null){
return false;
}
return $alert_timestamp;
}
在数据库中,我必须表通知和alerFrequencies 表,具有一对多的关系。 notification_id 是 alertFreqency 表中的外键。通知有列:是,网站 url 和 alertFrequencies 有:id。 notification_id 和 created_at。现在我想为通知表中的每个网站获取最新的 created_at。
【问题讨论】:
-
我不知道你想做什么。上述查询将仅返回 1 个 alert_frequency 和 仅 表中的 created_at 字段。这两个部分在您的查询中完全没有任何作用:
::with('notification')和->groupBy('created_at')。如果您没有在选择中包含id(或任何您的外键),您将无法加载关系。并且 group by 不会对任何内容进行分组,因为您只选择最新的 (->first())created_at字段。 -
当然它只返回一个,因为在您的查询中您只选择第一个,在查询结束时 ->first() 选择第一条记录,将其更改为 ->get()
-
@Levente Nagy 得到它给我错误:未定义的属性:Illuminate\Database\Eloquent\Collection::$created_at
-
可以显示数据库吗?
-
我应该在聊天中给你看数据库还是?
标签: php laravel laravel-5.3