我使用的是Laravel v4.2。我想要删除两个用户之间的对话但现在我想要如果一个用户删除对话,则其他用户可以查看对话,直到第二个用户也删除对话。 为此,我有两列删除会话名称“delete_on”和“delete_two”。为此,我使用了eloquent chunk方法,它始终返回false或null。
$return = Message::where('message_to', '=', $userData['id'])
->where('message_from', '=', $userData['message_from'])
->orwhere(function($query) use($userData) {
$query->where('message_to', '=', $userData['message_from'])
->where('message_from', '=', $userData['id']);
})->chunk(100,function($messages) use($userData){
foreach ($messages as $msg){
if(empty($msg->delete_one)){
$msg->delete_one = $userData['id'];
}else{
$msg->delete_two = $userData['id'];
}
if($msg->save()){
}
}
});
答案 0 :(得分:0)
chunk()
是一个帮助方法,可以在Query Builder或Eloquent Builder的实例上使用。在这两种情况下,该方法都返回void:
这意味着您的$return
变量将始终为空。
您需要采用的语法如下所示,在您的情况下它是雄辩的:
<强>锋强>
首先检查你是否在这里得到块结果:
Message::where('message_to', '=', $userData['id'])
->where('message_from', '=', $userData['message_from'])
->orwhere(function($query) use($userData) {
$query->where('message_to', '=', $userData['message_from'])
->where('message_from', '=', $userData['id']);
})->chunk(100,function($messages) use($userData){
foreach ($messages as $msg){
dd($msg); or print_r($msg);
}
});
现在试试这个
$return = Message::where('message_to', '=', $userData['id'])
->where('message_from', '=', $userData['message_from'])
->orwhere(function($query) use($userData) {
$query->where('message_to', '=', $userData['message_from'])
->where('message_from', '=', $userData['id']);
})->chunk(100,function($messages) use($userData){
foreach ($messages as $msg){
if(empty($msg->delete_one)){
$msg->delete_one = $userData['id'];
}else{
$msg->delete_two = $userData['id'];
}
$msg->save();
}
});