Laravel Eloquent 没有识别变量
Laravel Eloquent with not identifying variables
我正在尝试使用 laravel-eloquent 获取特定日期之后的房间和他们的预订。
$fdate='2015-01-05';
$roomdata=Rooms::where('city_id','=',$citydata['id'])
->with('types')
->with('localities')
->with('slideshow')
->with(array('booking' => function($query){
$query->where('bookstart','>',$fdate);
}))
->get();
这给我一个错误,说 $fdate
未定义。但是当我这样做时
$query->where('bookstart','>','2015-01-05');
效果很好。这背后有什么原因吗?有人可以为这个问题提供一个好的解决方案吗?
像这样输入分号:
$fdate='2015-01-05';
您正在 with
的回调中使用 closure。首先,引自该文档页面:
Closures may also inherit variables from the parent scope. Any such variables must be passed to the use language construct.
您正试图从匿名函数内的父作用域访问变量,因此您必须首先将其传递给 use
构造,以便让 PHP 知道您正在创建闭包围绕该变量:
$roomdata = Rooms::where('city_id','=',$citydata['id'])
->with('types')
->with('localities')
->with('slideshow')
->with(array('booking' => function($query) use($fdate) {
$query->where('bookstart','>',$fdate);
}))
;
将此与 Javascript 进行对比,后者允许程序员自动访问父作用域,因为每个子作用域都是父作用域的一部分 Scope Chain。这样的事情在 Javascript:
中有效
var foo = 'bar';
(function() {
alert(foo);
})();
在PHP中,从内部函数中获取对外部变量的访问不是自动的。通过这种方式,PHP 以 JavaScript 不具备的方式区分 closures and anonymous functions(又名 'lambdas'),至少在语法方面是这样。然而,这在文档中没有明确说明(手册似乎将两者等同起来,但实际上它们并不相同)。
可变范围:
$fdate='2015-01-05';
$roomdata=Rooms::where('city_id','=',$citydata['id'])
->with('types')
->with('localities')
->with('slideshow')
->with(array('booking' => function($query) use ($fdate){
$query->where('bookstart','>',$fdate);
}))
->get();
我正在尝试使用 laravel-eloquent 获取特定日期之后的房间和他们的预订。
$fdate='2015-01-05';
$roomdata=Rooms::where('city_id','=',$citydata['id'])
->with('types')
->with('localities')
->with('slideshow')
->with(array('booking' => function($query){
$query->where('bookstart','>',$fdate);
}))
->get();
这给我一个错误,说 $fdate
未定义。但是当我这样做时
$query->where('bookstart','>','2015-01-05');
效果很好。这背后有什么原因吗?有人可以为这个问题提供一个好的解决方案吗?
像这样输入分号:
$fdate='2015-01-05';
您正在 with
的回调中使用 closure。首先,引自该文档页面:
Closures may also inherit variables from the parent scope. Any such variables must be passed to the use language construct.
您正试图从匿名函数内的父作用域访问变量,因此您必须首先将其传递给 use
构造,以便让 PHP 知道您正在创建闭包围绕该变量:
$roomdata = Rooms::where('city_id','=',$citydata['id'])
->with('types')
->with('localities')
->with('slideshow')
->with(array('booking' => function($query) use($fdate) {
$query->where('bookstart','>',$fdate);
}))
;
将此与 Javascript 进行对比,后者允许程序员自动访问父作用域,因为每个子作用域都是父作用域的一部分 Scope Chain。这样的事情在 Javascript:
中有效var foo = 'bar';
(function() {
alert(foo);
})();
在PHP中,从内部函数中获取对外部变量的访问不是自动的。通过这种方式,PHP 以 JavaScript 不具备的方式区分 closures and anonymous functions(又名 'lambdas'),至少在语法方面是这样。然而,这在文档中没有明确说明(手册似乎将两者等同起来,但实际上它们并不相同)。
可变范围:
$fdate='2015-01-05';
$roomdata=Rooms::where('city_id','=',$citydata['id'])
->with('types')
->with('localities')
->with('slideshow')
->with(array('booking' => function($query) use ($fdate){
$query->where('bookstart','>',$fdate);
}))
->get();