变量在whereExist函数内部未定义 - laravel

时间:2015-04-15 10:46:50

标签: php laravel

我正在使用laravel,但在使用动态日期获取记录时出现问题。

$date = '2015-03-04';
    $records_all = DB::table('clients')
       ->whereExists(function($query)
       {
         $query->select(DB::raw(1))
         ->from('fb_page')
         ->whereRaw('fb_page.client_id = clients.client_id')
         ->whereNotExists(function($query)
         {
            $query->select(DB::raw(1))
            ->from('fb_stats')
            ->whereRaw('fb_stats.fb_page_id = fb_page.fb_page_id')
            ->where('fb_stats.recorded_on','=',$date); //$date here is undefined
         });
   })
   ->get();

由于某种原因使用whereExist时,$ date未定义。

1 个答案:

答案 0 :(得分:4)

您需要使用use构造手动将变量传递给闭包:

->whereNotExists(function($query) use ($date)
{
    $query->select(DB::raw(1))
          ->from('fb_stats')
          ->whereRaw('fb_stats.fb_page_id = fb_page.fb_page_id')
          ->where('fb_stats.recorded_on','=',$date);
});

来自PHP Docs on Anonymous Functions

  

闭包还可以从父作用域继承变量。任何此类变量都必须传递给use语言构造。