2017-09-25 72 views
0

我正在使用laraval v4.2。我想删除两个用户之间的对话,但现在我希望如果一个用户删除对话,而不是其他用户可以查看对话,直到第二个用户也删除对话。 为此我有两列删除会话名称“delete_on”和“delete_two”。为此,我使用总是返回false或null的雄辩大块方法。Laraval雄辩的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

你在这里得到什么SQL? –

+1

你正在'Query'上调用chunk,而不是'Collection'。你需要先结束查询(' - > get()'或' - > paginate()'...)。 – devk

+0

@ Mr.Pyramid no sql getting –

回答

0

chunk()是,你可以在查询生成器或机锋生成器的实例使用一个辅助方法。在这两种情况下,该方法返回void:

  1. Query Builder
  2. Eloquent Builder

这意味着你的$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(); 
         } 
        });