Laravel日期比较不适用于created_at列 [英] Laravel date comparasion not working for created_at column

查看:67
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆