首页 > 解决方案 > 我正在尝试从 larvavel 中的数据库中获取消息(有点卡住)

问题描述

我想在 laravel 中制作一个聊天应用程序。我正在尝试获取一对一的消息。

这是我的控制器:-

public function user( $id) {

        $chat = User::find($id);
        

        $table = DB::table('messages')
        ->where('sender', Auth::user()->id, '&&', 'reciever', $id)
        ->orWhere('sender', $id, '&&', 'reciever', Auth::user()->id)
        ->get();

        return view('user', compact('chat', 'id', 'table'));
   } 

我的消息迁移:-

public function up()
    {
        Schema::create('messages', function (Blueprint $table) {
            $table->id();
            $table->integer('sender')->unsigned();
            $table->integer('reciever')->unsigned();
            $table->text('message');
            $table->timestamps();
        });
    }

这是路线:- Route::get('/user/{id}', 'ContactsController@user');

这是我得到的错误:- SQLSTATE[HY000]: General error: 1 near ""sender"": syntax error (SQL: select * from "messages" where reciever "sender" = 30 "sender" = 1)


我觉得我的逻辑有问题,谁能指导我。

标签: phpmysqldatabaselaravelcontroller

解决方案


问题出在你where()orWhere()

->where('sender', Auth::user()->id, '&&', 'reciever', $id)
        ->orWhere('sender', $id, '&&', 'reciever', Auth::user()->id)

你应该怎么做:

->where([
    ['sender', Auth::user()->id],
    ['reciever', $id],
])->orWhere([
    ['sender', $id],
    ['reciever', Auth::user()->id],
])

我建议在深入研究之前阅读Laravel Where Clauses文档。


推荐阅读