PostgreSQL、集約関数でカラムエイリアスにhavingは使えない?

PostgreSQL、集約関数でカラムエイリアスにhavingは使えないっぽい

例)商品テーブル(products)からcategory_idごとの商品の合計値段から、合計値段が1000を越えるcategory_idを抽出

  • NG:
select category_id, sum(price) as amount from products group by category_id having amount > 1000
  • OK:
select category_id, sum(price) from products group by category_id having sum(price) > 1000

Laravelでhttp経由でDB+Webサーバーのヘルスチェックサンプル

Laravelでhttp経由でDB+Webサーバーのヘルスチェックサンプルです

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

class HealthCheckResultsController extends Controller
{
    public function __invoke()
    {
        $status = 500;

        try {
            DB::connection(config('database.default'))->getPdo();

            $status = 200;
        } catch (\Exception $exception) {
        }

        return response()
            ->json([], $status);
    }
}

api.phpなどで

Route::get('/health', 'HealthCheckResultsController');

Laravel 8+, PHP 8+であれば以下を使いたかった

github.com

Laravel 7+, PHP 7.4+でやろうとした残骸

github.com

tsmsogn/laravel-healthを利用する *1

composer.jsonに以下を追加

{
    "repositories": {
        "spatie/laravel-health": {
           "type": "vcs",
           "url": "https://github.com/tsmsogn/laravel-health"
        }
    }
}

composerでインストール

composer require spatie/laravel-health:dev-main

*1:いろいろな制限付き

laravelでCall to undefined method Illuminate\Routing\RouteFileRegistrar::get()

bad

Route::prefix('admin')->namespace('Admin')->name('admin.')->group(function () {
    // Authentication Routes...
    $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
});

good

Route::prefix('admin')->namespace('Admin')->name('admin.')->group(function () {
    // Authentication Routes...
    Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
});

Laravelで継承元モデルの$withを引き継ぎ、オーバーライドする

Model <- Bicycle <- ElectricBicycle

という継承関係で

Bicycleモデルで$withを使ってイーガーローディングしている

Bicycleモデルを継承したElectricBicycleモデルを作り、ElectricBicycle独自で実装したリレーションがあるとする

ElectricBicycleモデルでBicycleモデルの$with+独自実装したリレーションをイーガーローディングするためには以下のようにする

Bicycle

class Bicycle extends Model
{
    $with = [
        'handle'
    ];

    public function handle()
    {
         return $this->hasOne(Handle::class);
    }
}

ElectricBicycle

class ElectricBicycle extends Bicycle
{
    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        $this->with = array_merge(
            $this->with,
            [
                'battery',
            ]
        );
    }

    public function battery()
    {
         return $this->hasOne(Battery::class);
    }
}