##目的
LaravelのEloquent(エラクエント)を、今まで使用することが多く、SQLを書く際は、Eloquantで表現すると逆に複雑になるときや表現できないときに生SQLを書いていて、どちらのほうがいいんだろうと思い調べてみた。
##ORMの特徴
・特定のクラスとテーブルが一対一になっていて、そのクラスのインターフェースを使用し、データ操作を行える
・データ取得時に、そのデータを元にオブジェクトを生成
ORM(オブジェクト リレーション マッピング)を実現する仕組みをORマッパーという
Webフレームワークに標準で装備されていることが多い
##ORMのメリット
・SQL処理が、簡単に短く書ける
・MySQL、PostgreSQL、Oracle、SQLiteなどDBを変えた際(文法が異なる)でもORMがクッションとなり、ORMを使って書いたものは、実行することができる。
##ORMのデメリット
・複雑なクエリをかけない
・複雑なクエリを書く必要があるプロジェクトの場合、ORMとSQLの記述が存在するところがでてきて、統一性が損なわれる
・チューニングを丁寧に行う際に、丁寧なチューニングを行えない可能性がある。
(ORMに慣れ、内部的にどんなSQLが実行されているかわからない場合)
##それぞれの意見
ORM推奨は、ORMで書けないテーブル構成がダメ、オブジェクト指向原理でかける
ORM非推奨は、新人が使う場合、ORMになれると内部的に何が起こっているのかまで目を向けることが少なくなる。また、DBの違いを吸収してくれることを使うのはあまりない。どれだけ考慮しても、ORMでは書けないクエリがあるかも。
##個人的見解
SQLの知識量 > ORMの知識量 は絶対守ったほうがいいと思う。
業務ではWebフレームワークを使うことが多いため、ORM使いましょうとなることもよくある。初心者の僕には入りやすかった。ある程度使えたので、そこまで内部について詳しく調べなかった。しかし、DBチューニングをしている人の話を聞いたりすると、内部的なことを把握していて、僕には初耳のことばっかりだった。そこで感じたのが、長いプロジェクトは、テーブル構造などが変わるため、どうしてもORMで表現できず、複雑なSQLを要求される場合が現実的に出てくる。また、小さいプロジェクトでも、改修などの際に困る場合が出てくる。ORMはフレームワークごとの知識だが、SQLは共通。
必ず、ORMを使う際は、SQLが内部で何をしているかを学ばないとと感じた。
#参考にさせていただいたサイト
O/Rマッピングは百害あって一利なし!
今更ですがormについて教えてください 主にphpフレームワーク
Ormとの付き合い方