Laravel eloquent chunk方法一直返回false或null

时间:2017-09-25 13:07:43

标签: php laravel

我使用的是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()){
                            }
                        }
                    });

1 个答案:

答案 0 :(得分:0)

chunk()是一个帮助方法,可以在Query Builder或Eloquent Builder的实例上使用。在这两种情况下,该方法都返回void:

  1. Query Builder
  2. Eloquent Builder
  3. 这意味着您的$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();
                            }
                        });