sql >> データベース >  >> RDS >> Mysql

Laravel5のリレーションシップの列でpaginateを使用して「having」を使用する方法

    更新

    paginate()を使用する場合 クエリを使用すると、laravelは次のSQLコードを実行して、一致する可能性のある総数をカウントしようとします。

    select count(*) as aggregate 
    from `vehicles` inner join `dealers` 
      on `vehicles`.`dealer_id` = `dealers`.`id`
    having distance < 200
    

    ご覧のとおり、そのような列やエイリアスのdistanceはありません。 このクエリで。

    オプション2 私の元の答えでは、その問題も修正されます。

    元の回答

    これは、MySQL-strict-modeの問題であると考えられます。 laravel 5.3を使用する場合、デフォルトで厳密モードが有効になっています。 2つのオプションがあります:

    オプション1:config/database.phpでMySQLの厳密モードを無効にする

    ...
    'mysql' => [
        ...
        'strict' => false,
        ...
    ],
    ...
    

    オプション2:WHERE条件を使用する

    Vehicle::join('dealers', 'vehicles.dealer_id', '=', 'dealers.id')
         ->select(DB::raw("dealers.id, ( cos( radians(latitude) ) * cos( radians( longitude ) ) ) AS distance"))
         ->whereRaw('cos( radians(latitude) ) * cos( radians( longitude ) ) < 200');
    

    ドキュメント:

    サーバーSQLモード-ONLY_FULL_GROUP_BY



    1. TRANSACTION_MUTEXおよびマルチセッショントランザクションアクセス

    2. Ubuntuでpostgresqlを完全にパージして再インストールする方法は?

    3. OracleではsubstrまたはLIKEの方が高速ですか?

    4. 1つのステートメントで2つのテーブルを更新するにはどうすればよいですか?