1

I am trying to pass the locale data to the eloquent query but it cannot get it. $locale value is taken from the URI.

class MyController extends Controller { public function index($locale = 'en') { $news = News::join('categories', 'categories.id', '=', 'news.catid') ->select('news.*', 'categories.category') ->where([['news.published', '1'], ['news.deleted', '0']]) ->where(function ($query) { $query->where('news.language', $locale) //$locale is not recognized naturally ->orWhere('news.language', 'all'); }) ->orderBy('news.published_at', 'desc') ->take(4) ->get(); . . . } } 

How can I pass $locale value into the subquery?

1
  • 2
    function ($query) use ($locale) { Commented Jan 9, 2017 at 21:51

1 Answer 1

8

There is the use construct that you can use to create a closure around the variable:

->where(function ($query) use($locale) { $query->where('news.language', $locale) ->orWhere('news.language', 'all'); }) 

See Example #3 in the manual, "Inheriting variables from the parent scope".

Sign up to request clarification or add additional context in comments.

1 Comment

Very good. Actually, I did not know about naming my problem in order to make a Google search. Thanks.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.