![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
いつも勉強させて頂いております。
Doctrineを使って二つのテーブルを結合させ、配列に入れようとしているのですが、方法がわかりませんので、よろしければ教えて下さい。
また、mysql_queryを使う方法でもかまいません。
テーブルを次のようにします。
Table : Student
id,
name
Table : Diary
id,
day
これをIDを基に結合させるためには、どのように書けばいいでしょうか?
次のようにやってみたんですが、うまく行かず、何が悪いのかがわかりません。
$this->tmp = Doctrine_Query::create()
->select('s.id, d.id')
->from('Student s')
->leftJoin('s.id d');
$this->record = $this->tmp->fetchArray();
一番最後の行をコメントアウトすると画面は表示されますので、一番下の行が悪さしているのだと思います。
初歩的な質問になると思いますが、よろしければ教えて下さい。よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.3に書いたとおり、symfony1.4+Doctrineを使用しているため、そちらの手法とは異なるかもしれませんが、symfonyでの流れを簡単に書いてみます。
1.DB定義をします。
scheme.ymlという設定ファイルにテーブルの列情報やリレーション情報を記述します。
本質問の例ですと、「Diaryテーブルのid はStudentテーブルのidに存在すること」という外部キー制約を記述します。
2.コマンドでモデルクラスを生成します。
scheme.ymlに記述した内容に従ってモデルクラスを生成するコマンドが用意されているので実行します。
3.テーブル等を作成するSQLを生成します。
これも用意されたコマンドを実行すると、DBMSで実行すべきSQLが生成されます。
上記手順で準備すれば、No.3で回答したleftJoinの記述が可能になります。
質問からするとdoctrineを単体で使用されているように見受けられますので、私の回答では役にたたないように思います。
xKENx様
ご回答ありがとうございます。
私もSymfonyを使用しております。scheme.ymlファイルにリレーション情報を記載する必要がある、というところまでは理解しました。ここで関連付けを行っていないからleftjoinが動作しなかった、という理解でいいでしょうか?
関連付ける方法をネットで探しているんですが、どれがそれなのかがわからないという情けない状態です。
ちなみにですが、doctrineやsynfonyを使うにあたって、xKENx様はどのように使い方を理解されていったのでしょうか?
現在一人で勉強を進めている状態ですので、おすすめの参考書やホームページがあれば、それを教えていただけると幸いです。
No.3
- 回答日時:
symfony1.4でDoctrineを使っています。
StudentテーブルとDiaryテーブルとの間にリレーション設定されていることが前提ですが、
下記記述でいかがでしょうか。
->leftJoin('s.Diary d')
蛇足ですが、考え方としては、前提としたリレーション設定で Student.idとDiary.idは関連付けられているはずですから、Doctrineへ指示する内容は、「Student(=s)とDiaryをleftJoinしてaliasを d にする」ということになり、上記の記述となっています。
xKENx様
ご回答ありがとうございます。
正直リレーション設定という単語を今初めて聞いた状態です。リレーション設定というのは関連づけるという意味であると調査しましたが、具体的にソースコードに何か記載する必要があるのでしょうか?もしどこかにその設定を記載する必要があるならそちらも教えて頂ければ幸いです。
お手数ですがよろしくお願いします。
No.1
- 回答日時:
->leftJoin('Diary d ON s.id=d.id');
みたいにするんじゃないんですか?
よくわからないけど、s.idとd.idをSELECTする意味があるかどうかは疑問。
yambejp様
ご回答ありがとうございます。SQLの使い方がよくわかっていないので、ご指摘いただいた通りSELECTの使い方がよくわかっておりませんでした。このままだとidだけしか出てこなくなってしまいます。
よければ追加で教えて頂きたいのですが、教えて頂いた通りに実装してみると、結果としてrecordにはidとnameのみ入っていることが確認できたのですが、dayが入っておりませんでした。arrayにdayも追加するにはどうすればいいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL 【MySQL】本当に困っています。詳しい方、ご教授よろしくお願いします。 1 2023/06/03 14:18
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- PHP Q&Aサイトを作成していてURLの生成方法について迷っているのでアドバイスお願い致します 1 2023/08/10 16:42
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle SQL update方法 2 2022/06/22 14:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
VBとアクセスでSQL文に変...
-
AccessからExcelへエクスポート...
-
VB.NETからAccess内のデータベ...
-
MDBテーブルへの追加変更を教え...
-
Accessで別mdbのテーブルをコピー
-
他のMDBのテーブルに追加したい
-
Access2007でアプリケーション...
-
リストボックスに複数列表示し...
-
VBでコンボボックスとテキスト...
-
SQLを発行とは?クエリの作成と...
-
エクセルのテーブルを解除する...
-
[C#] DataGridViewでコンボボッ...
-
ワークテーブルの作成について
-
ADO.NETのOleDbAdapterに設定す...
-
ダイナセットタイプのレコード...
-
ACCESS クエリで 昇(または降...
-
コミットとは何でしょうか?
-
手動または分散トランザクショ...
-
access2007 「#Deleted」
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBとアクセスでSQL文に変...
-
Accessで別mdbのテーブルをコピー
-
『列名 '担当者CD' があいま...
-
CSVファイルのエクスポートでソ...
-
AccessからExcelへエクスポート...
-
エクセルのテーブルを解除する...
-
手動または分散トランザクショ...
-
他のMDBのテーブルに追加したい
-
HTMLのテーブルの行数が多くな...
-
SQLを発行とは?クエリの作成と...
-
WORD VBA プログラム修正をお願...
-
ACCESS2010 実行時エラー 2766
-
Excel複数シートをaccessへ一括...
-
ACCESSのテーブル名をリストに...
-
アクセステーブル、リンクとロ...
-
.net 複数の主キーを設定する方法
-
MDBテーブルへの追加変更を教え...
-
Accessで宛名ラベルに同一宛先...
-
DataGridの中身をDataSetにテー...
-
COBOLのINVALID KEYが理解でき...
おすすめ情報