使用 laravel 查询构建器构建查询
Build query using laravel query builder
您会在底部找到完整的功能。我希望查询是这样的,但是在 laravel 查询生成器中:
$sql = "SELECT * FROM chat WHERE (sender='$receiver' AND
receiver='$sender'AND status='sent') OR (sender='$sender' AND
receiver='$receiver'AND status='sent')";
此查询应该从聊天中检索消息,例如:发送者=3 和接收者=4,反之亦然。基本上是这两个人之间的聊天。
现在我在 laravel 中做了类似的事情,returns 整个聊天 table 它应该只检索给定的发送者和接收者之间的聊天。我知道问题出在 where 和 orWhere 子句中。
public function reloadChat(Request $request)
{
$sender = $request["sender"] ;
$receiver = $request["receiverid"] ;
$chats = DB::table('chats')
-> where(['sender_id' => $sender , 'receiver_id' => $receiver , 'status' => "sent" ])
-> orWhere(['sender_id' => $receiver , 'receiver_id' => $sender , 'status' => "sent" ])
->get();
foreach ($chats as $result)
{
if($result->sender_id==$sender)
{
echo "<div class=msgsend>".$result->message."</div>";
}else{
echo "<div class=msgrec>".$result->message."</div>";
}
}
}
P.S。 - 绝对是 laravel
的新手
编辑:
这行得通。但是当我使用变量而不是 3 和 4 id 时,它就不会了。
public function reloadChat(Request $request)
{
$sender = $request["sender"] ;
$receiver = $request["receiverid"] ;
var_dump($sender) ;
var_dump($receiver) ;
$chats = DB::table('chats')
-> where(function($query) {
$query->where('sender_id', "3")
->where('receiver_id', "4")
->where('status', "sent");
})
-> orWhere(function($query) {
$query->where('sender_id', "4")
->where('receiver_id', "3")
->where('status', "sent");
})->get();
}
你可以试试这个:
$chats = \DB::table('chats')
-> where(function($query) {
$query->where('sender_id', $sender)
->where('receiver_id', $receiver)
->where('status', status)
})
-> orWhere(function($query) {
$query->where('sender_id', $receiver)
->where('receiver_id', $sender)
->where('status', status)
})->get();
我发布的代码模拟了括号,因此它与您的原始查询的行为相同。如果它不起作用,我认为问题出在其他地方,您可能需要重新检查您的原始查询或您的参数。
访问文档Advanced wheres
示例使用
$chats = DB::table('chats')->where(function($query)
{
$query->where(['sender_id' => $sender , 'receiver_id' => "1", 'status' => "sent" ]);
})->orWhere(function($query)
{
$query->where(['sender_id' => "2", 'receiver_id' => "1", 'status' => "sent" ])
})->toSql();
toSql(); = return 创建了 sql 没有参数的命令
您会在底部找到完整的功能。我希望查询是这样的,但是在 laravel 查询生成器中:
$sql = "SELECT * FROM chat WHERE (sender='$receiver' AND
receiver='$sender'AND status='sent') OR (sender='$sender' AND
receiver='$receiver'AND status='sent')";
此查询应该从聊天中检索消息,例如:发送者=3 和接收者=4,反之亦然。基本上是这两个人之间的聊天。
现在我在 laravel 中做了类似的事情,returns 整个聊天 table 它应该只检索给定的发送者和接收者之间的聊天。我知道问题出在 where 和 orWhere 子句中。
public function reloadChat(Request $request)
{
$sender = $request["sender"] ;
$receiver = $request["receiverid"] ;
$chats = DB::table('chats')
-> where(['sender_id' => $sender , 'receiver_id' => $receiver , 'status' => "sent" ])
-> orWhere(['sender_id' => $receiver , 'receiver_id' => $sender , 'status' => "sent" ])
->get();
foreach ($chats as $result)
{
if($result->sender_id==$sender)
{
echo "<div class=msgsend>".$result->message."</div>";
}else{
echo "<div class=msgrec>".$result->message."</div>";
}
}
}
P.S。 - 绝对是 laravel
的新手编辑:
这行得通。但是当我使用变量而不是 3 和 4 id 时,它就不会了。
public function reloadChat(Request $request)
{
$sender = $request["sender"] ;
$receiver = $request["receiverid"] ;
var_dump($sender) ;
var_dump($receiver) ;
$chats = DB::table('chats')
-> where(function($query) {
$query->where('sender_id', "3")
->where('receiver_id', "4")
->where('status', "sent");
})
-> orWhere(function($query) {
$query->where('sender_id', "4")
->where('receiver_id', "3")
->where('status', "sent");
})->get();
}
你可以试试这个:
$chats = \DB::table('chats')
-> where(function($query) {
$query->where('sender_id', $sender)
->where('receiver_id', $receiver)
->where('status', status)
})
-> orWhere(function($query) {
$query->where('sender_id', $receiver)
->where('receiver_id', $sender)
->where('status', status)
})->get();
我发布的代码模拟了括号,因此它与您的原始查询的行为相同。如果它不起作用,我认为问题出在其他地方,您可能需要重新检查您的原始查询或您的参数。
访问文档Advanced wheres
示例使用
$chats = DB::table('chats')->where(function($query)
{
$query->where(['sender_id' => $sender , 'receiver_id' => "1", 'status' => "sent" ]);
})->orWhere(function($query)
{
$query->where(['sender_id' => "2", 'receiver_id' => "1", 'status' => "sent" ])
})->toSql();
toSql(); = return 创建了 sql 没有参数的命令