TsukasaGR
@TsukasaGR (Tsukasa Sekiguchi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Laravelアプリ運用中にDBのレコード更新が必要になった場合、皆さんはどのように対応されていますか?

Discussion

気になっていること

  • Laravelアプリ運用中にDBのレコード更新が必要になった場合、皆さんはどのように対応されていますでしょうか?

前提

  • DBのレコード更新は以下のようなケースを指しています

    • DBの定義などが変わり、レコードの更新が必要になるケース
    • 具体例

      • articles : categoriesがN:1からN:Nに定義変更される

        Before After
        image.png image.png
        • このような変更があった場合、要件によってはarticles.category_idをもとにarticle_categoryのレコードを作成する必要があると思います ← これをみなさんがどのように対応されているか知りたいです
  • こんな質問をしておきながら申し訳ありませんが、極論ケースバイケースだと思うのであまり口調を強めず私はこういう理由でこの方法を使うことが多いですというような回答を頂けますと幸いです🙇

実経験、及びその他個人的に思いつく方法

大分類すると以下6種類くらいになるのかなと考えています。
image.png

以下が上記の補足になります

項目 補足
Laravel内 / 外 Laravelアプリケーション内で処理を行うかどうかになります
migrate artisan migrateで処理を行うものを指しています
console artisan app:xxxで処理を行うものを指しています
SQL 以下のようなものを指しています
image.png
Eloquent 以下のようなものを指しています
image.png

それぞれの方法に対して個人的に思いつくプロコン

パッと思ったものを書き出したので過不足あると思いますが、個人的にはこのあたりかなと考えています。

項目 Pros Cons
Laravel内のプロコン
(外は逆)
単一リポジトリのGit管理下でデータマイグレーション履歴が一通り確認できる Laravelアプリ外にも影響を及ぼす場合にハンドリングしきれない
migrate
(consoleは逆)
CI/CDでそのまま実行されるため、追加で手動作業を行う必要がない エラー発生時などのリカバリ、リストアが困難になる可能性がある
SQL
(Eloquentは逆)
app配下内の状態に依存しないため、常に正常に動作する(はず)

上記Eloquentの画像の場合、例えばArticleモデルがPostモデルにリネームされると処理が動かなくなる
SQLのみで実装すると複雑度が増してしまう可能性がある

個人的な意見

  • 以下の方法は後々面倒になる可能性があるため、できる限りやらないほうが良いのかなと思います
    • Laravel内 -> migrate -> Eloquent
  • 上記以外の方法はいずれも一長一短なので一概には言えないかなと思いますが、個人的には特別な制約がない限り以下の方法で良いのかなと考えています
    • Laravel内 -> migrate -> SQL

さいごに

前提にも記載したとおり極論ケースバイケースだと思うので、野暮な質問かなとも思いつつ、ある程度デファクトになっている方法があればそれはそれで気になるなと思い投稿させて頂きました🙇

0

そうですね、DBの定義はmigrateでやりますが(1-2)。データの方はそのままSQLですね(3-1)。でも確かに問題は出ます。同僚が3-1をやってない場合、エラーが発生し半日かけてディバグして新しいテーブルにデータがなかったとかあります。
2-2がベストだと思います。

0Like

Your answer might help someone💌