Laravel : 选择记录时比较两个 table 之间的日期时间
Laravel : Comparing datetime between two table while selecting record
我有 Laravel 应用程序,我在其中检查线程评论 (thread_comment table) 创建日期时间和线程 (线程 table) 上次访问日期。
我会select如果任何线程评论创建日期时间 > 线程上次访问日期,我将查询它们。
这样做的目的是通知用户自上次访问他们的线程以来有多少新评论。
下面是我的代码。
$new_thread_comment_count = DB::table('ap_thread')
->join('ap_thread_comment', 'ap_thread_comment.ThreadID', '=', 'ap_thread.ThreadID')
->where('ap_thread.CreatedBy', Auth::user()->UserID)
->where('ap_thread_comment.CreatedDateTime','>','ap_thread.last_visit_date')
->count();
我的问题是,这不起作用。如果我将操作数更改为 <,它会显示所有记录,这是不正确的。
在比较两个 table 之间的日期时间时,我是否需要在 where 子句中进行任何日期时间转换?
CREATE TABLE `ap_thread`
(`ThreadID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`ThreadTitle` text NOT NULL,
`Remark` text NOT NULL,
`CountryID` smallint(6) NOT NULL,
`last_visit_date` datetime NOT NULL,
`Thread_StatusID` tinyint(4) NOT NULL,
`StatusID` tinyint(4) NOT NULL,
`CreatedBy` bigint(20) NOT NULL,
`CreatedDateTime` datetime NOT NULL,
`EditedBy` bigint(20) NOT NULL,
`EditedDateTime` datetime NOT NULL,
`IsSelling` tinyint(1) NOT NULL,
PRIMARY KEY (`ThreadID`))
CREATE TABLE `ap_thread_comment` (
`Thread_CommentID` bigint(20) NOT NULL AUTO_INCREMENT,
`ThreadID` bigint(20) NOT NULL,
`StatusID` tinyint(4) NOT NULL,
`reply_to` bigint(20) unsigned NOT NULL,
`CreatedBy` bigint(20) NOT NULL,
`CreatedDateTime` datetime NOT NULL,
`Comment` text NOT NULL,
PRIMARY KEY (`Thread_CommentID`))
抱歉造成混淆。线程table 存储了用户创建的所有线程。而 thread_comment 存储其他用户评论的评论。
我想要做的是 select 通过比较 ap_thread_comment CreatedDateTime is > ap_thread last_visit_date 由登录用户创建的每个线程的总新评论。
- last_visited_date只会在线程所有者访问线程时更新。
使用
解决
$new_thread_comment_count = DB::table('ap_thread')
->join('ap_thread_comment', 'ap_thread_comment.thread_id', '=', 'ap_thread.thread_id')
->whereRaw('ap_thread_comment.created_at > ap_thread.last_visit_date')
->where('ap_thread.created_by','=',Auth::user()->user_id)
->Count();
我有 Laravel 应用程序,我在其中检查线程评论 (thread_comment table) 创建日期时间和线程 (线程 table) 上次访问日期。
我会select如果任何线程评论创建日期时间 > 线程上次访问日期,我将查询它们。 这样做的目的是通知用户自上次访问他们的线程以来有多少新评论。
下面是我的代码。
$new_thread_comment_count = DB::table('ap_thread')
->join('ap_thread_comment', 'ap_thread_comment.ThreadID', '=', 'ap_thread.ThreadID')
->where('ap_thread.CreatedBy', Auth::user()->UserID)
->where('ap_thread_comment.CreatedDateTime','>','ap_thread.last_visit_date')
->count();
我的问题是,这不起作用。如果我将操作数更改为 <,它会显示所有记录,这是不正确的。 在比较两个 table 之间的日期时间时,我是否需要在 where 子句中进行任何日期时间转换?
CREATE TABLE `ap_thread`
(`ThreadID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`ThreadTitle` text NOT NULL,
`Remark` text NOT NULL,
`CountryID` smallint(6) NOT NULL,
`last_visit_date` datetime NOT NULL,
`Thread_StatusID` tinyint(4) NOT NULL,
`StatusID` tinyint(4) NOT NULL,
`CreatedBy` bigint(20) NOT NULL,
`CreatedDateTime` datetime NOT NULL,
`EditedBy` bigint(20) NOT NULL,
`EditedDateTime` datetime NOT NULL,
`IsSelling` tinyint(1) NOT NULL,
PRIMARY KEY (`ThreadID`))
CREATE TABLE `ap_thread_comment` (
`Thread_CommentID` bigint(20) NOT NULL AUTO_INCREMENT,
`ThreadID` bigint(20) NOT NULL,
`StatusID` tinyint(4) NOT NULL,
`reply_to` bigint(20) unsigned NOT NULL,
`CreatedBy` bigint(20) NOT NULL,
`CreatedDateTime` datetime NOT NULL,
`Comment` text NOT NULL,
PRIMARY KEY (`Thread_CommentID`))
抱歉造成混淆。线程table 存储了用户创建的所有线程。而 thread_comment 存储其他用户评论的评论。 我想要做的是 select 通过比较 ap_thread_comment CreatedDateTime is > ap_thread last_visit_date 由登录用户创建的每个线程的总新评论。
- last_visited_date只会在线程所有者访问线程时更新。
使用
解决$new_thread_comment_count = DB::table('ap_thread')
->join('ap_thread_comment', 'ap_thread_comment.thread_id', '=', 'ap_thread.thread_id')
->whereRaw('ap_thread_comment.created_at > ap_thread.last_visit_date')
->where('ap_thread.created_by','=',Auth::user()->user_id)
->Count();