3

Laravel フレームワークを使い始めましたが、流暢なクエリ ビルダーに問題があります。where 条件で生の値 または を使用Input::get()すると、結果が取得されて正しく実行されますが、割り当てられた変数を使用すると、「未定義の変数」エラーが表示されます。

$properties = Listing::where(function($query)
{
    if (Input::has('property-type')) $query->where('property_type', '=',Input::get('property-type'));
})->get();

それは正しく動作しますが、もしそうなら

$pt=Input::get('property-type');
$properties = Listing::where(function($query)
{
    if ($pt!='') $query->where('property_type', '=',$pt);
})->get();

エラーを返します

Undefined variable: pt

変数「$pt」を出力すると、値が含まれます。

これらの値をコントローラーからモデルにパラメーターとして渡し、モデル関数でクエリを作成する必要があるため、変数値のみを使用したいと考えています。私は何か間違ったことをしていますか?クエリ実行前に変数が割り当てられていませんか? 誰でもこれを解決するのを手伝ってくれますか?

4

2 に答える 2

2

@viji コメントのおかげで、phpuseキーワードを利用してそれを行うことができます。

$var = 5;
$orgs = app('db')->table('t')
        ->where('status', '=', '1')
        // Sending $var to anonymous function
        ->where(function ($query) use ($var) {
            $query->where('orgs.name', 'like', "%$var%");
        })->select('id')
        ->get();
于 2016-09-21T18:14:36.023 に答える
0

変数に苦労している理由は、匿名関数のスコープ外にあるためです。

変数をモデルに渡してクエリを作成することについて心配する必要はありません。単にすばらしいInputクラス メソッドを使用するだけです。

于 2013-01-24T18:10:54.423 に答える