Laravel日期比较不适用于created_at列 [英] Laravel date comparasion not working for created_at column
本文介绍了Laravel日期比较不适用于created_at列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我编写了一个查询,用于检查正在通话的用户删除对话后写入对话的消息.这是我的查询:
I've written a query for checking the messages that are written to conversation after it's deleted by a user that's in conversation. Here is my query:
$messages = DB::table('conversations')
->where('conversations.id', $conversation->id)
->join('messages', 'messages.conversation_id', '=', 'conversations.id')
->join('deleted_conversations', 'deleted_conversations.conversation_id', '=', 'conversations.id')
->where('messages.created_at', '>=', 'deleted_conversations.created_at')
->orderBy('messages.created_at', 'desc')
->select('messages.*')
->get()
->all();
但是每次我尝试使用 where('messages.created_at,'<','deleted_conversations_created_at
语句运行查询时,如果没有精确地检查日期,为什么?
But everytime i try to run this query with where('messages.created_at, '<', 'deleted_conversations_created_at
statement if doesn't check for dates precisely. Why?
这里是迁移:
Schema::create('conversations', function (Blueprint $table) {
$table->id();
$table->integer('sender_id');
$table->integer('receiver_id');
$table->enum('status', ['read', 'unread']);
$table->timestamps();
});
Schema::create('messages', function (Blueprint $table) {
$table->id();
$table->integer('conversation_id');
$table->integer('sender_id');
$table->string('message');
$table->timestamps();
});
Schema::create('deleted_conversations', function (Blueprint $table) {
$table->id();
$table->integer('conversation_id');
$table->integer('user_id');
$table->timestamps();
});
deleted_conversations表
deleted_conversations table
id | conversation_id | user_id | created_at | updated_at |
---|---|---|---|---|
1 | 1 | 2 | 2021-02-28 11:26:36 | 2021-02-28 11:30:45 |
对话表
id | sender_id | user_id | receiver_id | 状态 | created_at | updated_at |
---|---|---|---|---|---|---|
1 | 1 | 1 | 2 | 未读 | 2021-02-28 11:07:09 | 2021-02-28 11:31:50 |
消息表
id | conversation_id | sender_id | 消息 | created_at | updated_at |
---|---|---|---|---|---|
1 | 1 | 1 | S.A | 2021-02-28 00:00:00 | 2021-02-28 00:00:00 |
2 | 1 | 2 | A.S | 2021-02-28 00:00:00 | 2021-02-28 00:00:00 |
推荐答案
当您要添加 where
子句(其中值是另一列)时,需要使用 whereColumn():
When you want to add a where
clause where the value is another column, you need to use whereColumn():
->whereColumn('messages.created_at', '>=', 'deleted_conversations.created_at')
这篇关于Laravel日期比较不适用于created_at列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文