535

Laravel Eloquent クエリ ビルダーを使用しており、WHERE複数の条件で句が必要なクエリがあります。動作しますが、エレガントではありません。

例:

$results = User::where('this', '=', 1)
    ->where('that', '=', 1)
    ->where('this_too', '=', 1)
    ->where('that_too', '=', 1)
    ->where('this_as_well', '=', 1)
    ->where('that_as_well', '=', 1)
    ->where('this_one_too', '=', 1)
    ->where('that_one_too', '=', 1)
    ->where('this_one_as_well', '=', 1)
    ->where('that_one_as_well', '=', 1)
    ->get();

これを行うためのより良い方法はありますか、またはこの方法に固執する必要がありますか?

4

26 に答える 26

109

次のように、無名関数でサブクエリを使用できます。

 $results = User::where('this', '=', 1)
       ->where('that', '=', 1)
       ->where(
           function($query) {
             return $query
                    ->where('this_too', 'LIKE', '%fake%')
                    ->orWhere('that_too', '=', 1);
            })
            ->get();
于 2014-06-20T08:07:51.127 に答える
15
Model::where('column_1','=','value_1')
       ->where('column_2 ','=','value_2')
       ->get();

また

// If you are looking for equal value then no need to add =
Model::where('column_1','value_1')
        ->where('column_2','value_2')
         ->get();

また

Model::where(['column_1' => 'value_1',
              'column_2' => 'value_2'])->get();
于 2018-05-28T04:45:12.493 に答える
13

複数の where 句

    $query=DB::table('users')
        ->whereRaw("users.id BETWEEN 1003 AND 1004")
        ->whereNotIn('users.id', [1005,1006,1007])
        ->whereIn('users.id',  [1008,1009,1010]);
    $query->where(function($query2) use ($value)
    {
        $query2->where('user_type', 2)
            ->orWhere('value', $value);
    });

   if ($user == 'admin'){
        $query->where('users.user_name', $user);
    }

やっと結果が出ました

    $result = $query->get();
于 2016-08-07T06:15:50.997 に答える
5

サブクエリには他のフィルタを必ず適用してください。そうしないと、 または がすべてのレコードを収集する可能性があります。

$query = Activity::whereNotNull('id');
$count = 0;
foreach ($this->Reporter()->get() as $service) {
        $condition = ($count == 0) ? "where" : "orWhere";
        $query->$condition(function ($query) use ($service) {
            $query->where('branch_id', '=', $service->branch_id)
                  ->where('activity_type_id', '=', $service->activity_type_id)
                  ->whereBetween('activity_date_time', [$this->start_date, $this->end_date]);
        });
    $count++;
}
return $query->get();
于 2016-03-26T14:29:40.373 に答える
2

Laravel 5.3で雄弁を使うことができます

すべての結果

UserModel::where('id_user', $id_user)
                ->where('estado', 1)
                ->get();

部分的な結果

UserModel::where('id_user', $id_user)
                    ->where('estado', 1)
                    ->pluck('id_rol');
于 2016-10-25T13:41:45.400 に答える
2

フィルターまたは検索を行っている場合、私の提案に従って

次に、次のようにする必要があります。

        $results = User::query();
        $results->when($request->that, function ($q) use ($request) {
            $q->where('that', $request->that);
        });
        $results->when($request->this, function ($q) use ($request) {
            $q->where('this', $request->that);
        });
        $results->when($request->this_too, function ($q) use ($request) {
            $q->where('this_too', $request->that);
        });
        $results->get();
于 2018-11-23T09:59:30.523 に答える
-5
public function search()
{
    if (isset($_GET) && !empty($_GET))
    {
        $prepareQuery = '';
        foreach ($_GET as $key => $data)
        {
            if ($data)
            {
                $prepareQuery.=$key . ' = "' . $data . '" OR ';
            }
        }
        $query = substr($prepareQuery, 0, -3);
        if ($query)
            $model = Businesses::whereRaw($query)->get();
        else
            $model = Businesses::get();

        return view('pages.search', compact('model', 'model'));
    }
}
于 2015-08-10T20:00:08.753 に答える