Laravel - get last row using whereHas(Laravel - 使用 whereHas 获取最后一行)
问题描述
我正在尝试获取最后一次用户活动的时间created_at",我有模型 User
和 UserActivity
.
我想获取最后一个用户活动并检查该用户的最后一个活动是否是 3 天才能发送通知,
I am trying to get the time "created_at" for the last user activity,
I have the model User
, and UserActivity
.
I want to get the last user activity and check if the last activity of this user is 3 days to send notification,
User.php
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
public function activites()
{
return $this->hasMany(Activty::class);
}
}
Activity.php
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
use CarbonCarbon;
class Activity extends Model
{
function function user(){
return $this->belongsTo(User::class);
}
}
控制器
$latest_activites = User::whereHas("activites",function($query){
$query->where("created_at",">=",Carbon::now()->subDays(3));
});
$latest_activites = $latest_activites->get();
推荐答案
首先,在 User
模型中创建另一个关系,即 必须是 hasOne
以获取最新活动:
First, create another relationship in User
model, which has to be hasOne
to get the latest activity:
public function latestActivity()
{
return $this->hasOne(Activity::class)->latest();
}
然后只加载最近活动超过 3 天的用户
Then load just users who have latest activities older than 3 days
$users = User::whereHas('activites', function($q) {
$q->where('created_at', '<=', now()->subDays(3));
})
->whereDoesntHave('activites', function($q) {
$q->where('created_at', '>', now()->subDays(3));
})
->with('latestActivity')
->get();
这篇关于Laravel - 使用 whereHas 获取最后一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Laravel - 使用 whereHas 获取最后一行
基础教程推荐
- 使用 PDO 转义列名 2021-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- HTTP 与 FTP 上传 2021-01-01
- PHP 守护进程/worker 环境 2022-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01