質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

2479閲覧

DBファサードで書いているSQLをクエリービルダーで書き直したいです。

T.FUJII

総合スコア21

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2018/03/27 03:43

###前提・実現したいこと

質問①
今今DBファサードを使いSELECTクエリーを使ってSQLを書いています。それをクエリービルダー又はORM(Eloquent)で書き直したいです。具体的に言うと服問い合わせ(SELECT DISTINCT...)部分のの書き方が分かりません。

質問②
プログラム初心者でORMについて理解できていないのですが、下記のようなSQLではORMは使えないのでしょうか?

質問③
DBファサードを使う場合、クエリービルダーを使う場合、Eloquentを使う場合それぞれのメリットデメリットが知りたいです。

下記URL(Laravel5のデータベース操作)を参照しました。
https://qiita.com/shiichi/items/b31f0c870b28bb90758f

ご協力よろしくお願いいたします。(T_T)

###発生している問題・エラーメッセージ

###該当のソースコード

php

1 $datas = DB::select( 2 "SELECT * 3 FROM companies 4 A 5 INNER JOIN ( 6 SELECT DISTINCT company_id 7 FROM companies_large_industries 8 WHERE large_industries_id IN (\"$large_industries_name_rikunavi\",\"$large_industries_name_DODA\") 9 ) B 10 ON A.company_id = B.company_id 11 INNER JOIN ( 12 SELECT DISTINCT company_id 13 FROM companies_large_job_categories 14 WHERE large_job_category_id IN (\"$large_job_categories_rikunavi\",\"$large_job_categories_DODA\") 15 ) D 16 ON B.company_id = D.company_id 17 INNER JOIN ( 18 SELECT DISTINCT company_id 19 FROM companies_work_locations 20 WHERE prefecture_id IN (\"$work_locations\") 21 ) G 22 ON D.company_id = G.company_id" 23 );

###補足情報(言語/FW/ツール等のバージョンなど)

開発環境:Vagrant + VirtualBox / Homestead
言語:php-7.1.14 (NTS)
フレームワーク:Laravel5.5 (LTS)
サーバー:nginx
DB:MySQL

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SQLからクエリビルダーへの変換支援に以下のようなサービスがあったりします。
Convert Your SQL to Laravel Builder with Orator
Convert Your Legacy SQL to Laravel Builder

質問のSQLも一つ一つ頑張って変換すればクエリビルダーでも書けますが、基本的に集計や複雑な物はSQLの表現力を使ってやった方がよいです。
クエリビルダーの利点としては、処理中の条件分岐等でクエリを付け足しが行いやすいなどがあります。
Eloquentの利点としては、モデルの様々な特性を活かせます。
Laravel 5.5 Eloquent:利用の開始
Laravel 5.5 Eloquent:リレーション
Laravel 5.5 Eloquent:ミューテタ

投稿2018/03/27 04:38

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

T.FUJII

2018/03/27 05:15

aro10様 今回もご教授いただきありがとうございました。 変換サービスも教えていただきありがとうございました!
aro10

2018/03/27 08:31

質問のSQLはよく見ると特にグループ化や集計してるわけでもなさそうですね。こういうキーを元に関係したテーブルのデータを引っ張ってくる場合は、ORMのリレーションをうまく使うと開発が素早くできます。 [Laravel 5.5 Eloquent:リレーション](https://readouble.com/laravel/5.5/ja/eloquent-relationships.html)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問