インターネットで見つけた説明は、データベースの切り替えを容易にし、SQL の作成を避けるためのものです。この 2 つがよくわかりません。
1 つ目は、データベースを切り替えるということは、mysql を SQL サーバーに切り替えるような意味ですか? ただし、テーブル構造が同じである限り、ネイティブ SQL とクエリ コンストラクターは必要ありません。変えられること。
2 番目に、長い SQL の記述を避けます。クエリ コンストラクターでもこれが可能です。
クエリ コンストラクターと ORM の違いについては、クエリ コンストラクターは SQL を生成するクラスであるのに対し、ORM はテーブルにマップされ、フィールドがメンバー変数にマップされるクラスであると理解しています。もう一つ質問がありますが、テーブルとフィールドがたくさんある場合、ORM クラスは非常に冗長になるのではないでしょうか?私の理解が間違っているところを修正してください。
$user = DB::table('users')->where('name','Laravel')->first();//laravel クエリ コンストラクター
$posts = Post::where('id','<',3)->orderBy('id','desc')->take(1)->get();//laravel orm
おっしゃるとおり、テーブルとフィールドがたくさんある場合、ORM クラスは非常に冗長になります。
ORM の本質は、データベース テーブルとテーブル間の関係をオブジェクトとオブジェクトの関係にマッピングすることです。このマッピング関係は双方向ですが、オブジェクト -> RDB の方向にはいくつかの問題があることに注意してください。 RDB のエンティティの記述は、Object のエンティティの記述ほど豊富ではないためです。簡単に答えますと、ORMはobject Relational Mappingの略で、オブジェクトはオブジェクト、リレーショナルは関係、マッピングはマッピングです。オブジェクト リレーショナル マッピングは非常に抽象的であるように見えますが、確かにそれは抽象的な概念です。プログラミング構文の観点から見ると、特にビジネス オブジェクトを操作する場合、複雑な SQL ステートメントを扱う必要はなくなり、オブジェクトのプロパティとメソッドを単純に操作するだけで済みます。
それでは 2 つの質問に答えてください
まず、mysql と sqlserver の間には多くの違いがあります。プログラムで使用する mysql_ で始まる関数は、sqlserver では認識されません。では、コードを変更せずに移行するにはどうすればよいでしょうか?
第 2 に、ORM にはテーブルとクラス間のマッピングだけでなく、次のマッピング関係が含まれています。
データベース内のクラスとテーブルのマッピング: データベース内の各テーブルはプログラミング言語のクラスに対応します
テーブル内のオブジェクトとレコードのマッピング: リレーショナル データベース内のテーブルには複数のレコードが含まれる場合があり、各レコードはクラスのインスタンスに対応します
クラスの属性とデータベースのテーブルのフィールド間のマッピング: データベースのテーブルのフィールドのデータ型とクラスの属性の型も 1 対 1 に対応します