我正在使用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未定义。
答案 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
语言构造。