はい!今やってます!

Work Pertly, Live Idly

Laravel関連のコマンド・コード覚書き

Laravel関連のコマンド・コード覚書き

Check routes

php artisan route:list -v

Generate controller sample

php artisan make:controller JobController --resource
php artisan make:controller UserController --resource
php artisan make:controller UserJobController --resource

Generate model sample

php artisan make:model Job -m

Generate resource sample

php artisan make:resource JobResource
php artisan make:resource UserResource
php artisan make:resource ThreadResource
php artisan make:resource MessageResource

Generate seeder sample

php artisan make:seeder JobSeeder
php artisan make:seeder ThreadSeeder

Generate request

php artisan make:request IndexUser
php artisan make:request StoreUser

Execute seed

php artisan db:seed
php artisan db:seed --class=UserTableSeeder

migrate

php artisan migrate
php artisan migrate --force
php artisan migrate:rollback
php artisan migrate:rollback --step=5
php artisan migrate:reset
php artisan migrate:refresh
php artisan migrate:refresh --seed
php artisan migrate:refresh --step=5
php artisan migrate:fresh
php artisan migrate:fresh --seed
php artisan make:migration create_users_table --create=users
php artisan make:migration add_votes_to_users_table --table=users

key generate

php artisan key:generate --show

Enable Query Log

\DB::enableQueryLog();

GormのPreload時のstatusチェックの挙動

GormのSQLでPreloadを利用する場合、各モデルと紐付けるタイミングで条件を指定したくなる場合がある。 Preloadに条件指定する場合に、上手く実行されるケースとされないケースがある。

こちらは正しくすべてのテーブルでstatusが指定される。

func (questionRepository *questionRepository) FindQuestions(tx *gorm.DB, questions *[]model.Question) (err error) {
    if result := tx.
        Where("status = ?", status.Valid).
        Preload("User", "status = ?", status.Valid).
        Preload("User.Contact", "status = ?", status.Valid).
        Find(&questions); result.Error != nil && !result.RecordNotFound() {
        return result.Error
    }
    return nil
}

しかし、こちらだとquesionsテーブルではステータスが正しく指定されるが、それ以外のテーブルでstatusが正しく指定されない場合がある。

func (questionRepository *questionRepository) FindQuestions(tx *gorm.DB, questions *[]model.Question) (err error) {
    if result := tx.
        Where("status = ?", status.Valid).
        Preload("User.Contact", "status = ?", status.Valid).
        Preload("User", "status = ?", status.Valid).
        Find(&questions); result.Error != nil && !result.RecordNotFound() {
        return result.Error
    }
    return nil
}

Preloadの順番に気をつけて