我正在尝试从 laravel 中的数据库中获取消息(有点卡住)
I am trying to fetch messages from databse in larvavel (little stuck)
我打算在 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)
我觉得我的逻辑有问题,谁能指导我。
有关查询分组的信息,请参阅 https://laravel.com/docs/7.x/queries#parameter-grouping。你需要像这样分离你的逻辑
$table = DB::table('messages')
->where(function($query) use ($id) { // Where (sender = User AND receiver = id)
$query->where('sender', Auth::user()->id)
->where('reciever', $id);
})
->orWhere(function($query) use ($id) { // OR (sender = id AND receiver = User)
$query->where('sender', $id)
->where('reciever', Auth::user()->id);
})
->get();
问题出在您的 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 文档。
这对我有用:-
$messages = Message::where('sender', $id)->orWhere('reciever', $id)->get();
$messages = Message::where(function($q) use ($id) {
$q->where('sender', auth()->id());
$q->where('reciever', $id);
})->orWhere(function($q) use ($id){
$q->where('sender', $id);
$q->where('reciever', auth()->id());
})
->get();
我打算在 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)
我觉得我的逻辑有问题,谁能指导我。
有关查询分组的信息,请参阅 https://laravel.com/docs/7.x/queries#parameter-grouping。你需要像这样分离你的逻辑
$table = DB::table('messages')
->where(function($query) use ($id) { // Where (sender = User AND receiver = id)
$query->where('sender', Auth::user()->id)
->where('reciever', $id);
})
->orWhere(function($query) use ($id) { // OR (sender = id AND receiver = User)
$query->where('sender', $id)
->where('reciever', Auth::user()->id);
})
->get();
问题出在您的 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 文档。
这对我有用:-
$messages = Message::where('sender', $id)->orWhere('reciever', $id)->get();
$messages = Message::where(function($q) use ($id) {
$q->where('sender', auth()->id());
$q->where('reciever', $id);
})->orWhere(function($q) use ($id){
$q->where('sender', $id);
$q->where('reciever', auth()->id());
})
->get();