Я пытаюсь использовать 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');
Это прекрасно работает. Есть ли причина этого? Может кто-нибудь предложить хорошее решение этой проблемы?
Вы используете закрытие внутри обратного вызова with
, Во-первых, цитата из этой страницы документа:
Замыкания также могут наследовать переменные из родительской области. Любые такие переменные должны быть переданы в конструкцию языка использования.
Вы пытаетесь получить доступ к переменной из родительской области внутри вашей анонимной функции, поэтому вы должны сначала передать ее 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, который позволяет программисту автоматически обращаться к родительской области, потому что каждая дочерняя область является частью родительской области. Цепочка прицела. Примерно так будет в Javascript:
var foo = 'bar';
(function() {
alert(foo);
})();
В PHP получение доступа к внешним переменным из внутренних функций не происходит автоматически. Таким образом, PHP различает укупорочные а также анонимные функции (иначе, как «лямбды»), чего не делает JavaScript, по крайней мере, по синтаксису. Тем не менее, это не ясно изложено в документации (руководство, кажется, приравнивает их, когда они на самом деле не совпадают).
Переменная область:
$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();
поставить точку с запятой примерно так:
$fdate='2015-01-05';