[Codeigniter-users] 1つのマスタをleftjoinで複数回参照

アーカイブの一覧に戻る

tsuji kuni kunit****@gmail*****
2013年 3月 21日 (木) 17:25:00 JST


あ、その場合なら、

s1.staff_name as s1_staff_name,
と、別名にすれば、くべつてまきますよ。取り出すときは、
s1_staff_nameと
別名にした名前でとれます。
2013/03/21 16:45 "小島健太郎" <kojim****@gmail*****>:

> ご回答ありがとうございます。
> ご提案頂いたようにモデルを
>
> //Model
> function getList(){
>   $this->db->select("s1.staff_name,s2.staff_name,s3.staff_name");
>   $this->db->from(t_daichou as d);
>   $this->db->join("m_staff as s1","d.uke_id=s1.staff_id","left");
>   $this->db->join("m_staff as s2","d.tai_id=s2.staff_id","left");
>   $this->db->join("m_staff as s3","d.update_id=s3.staff_id","left");
>   return $this->db->get();
> }
>
> のように修正しましたが、エラーの内容が変わりませんでした。
> なのでView側で
>
> var_dump(rsList->result());
>
> として中身を確認したところ、項目名は全て「s1.」「s2.」などがなくなった状態となっていました。
>
> とり急ぎこれは「ムリ」と判断して、アクティブレコードを使わないく方向で解決しようと思います。
> たびたびどうもありがとうございました。
> (自分が大きな勘違いをしている可能性がありますが)
>
> もし同様のことを試していただいて、うまくいくやり方がありましたらご連絡いただけると幸いです。
>
> 小島
>
> ****************************
>
> 2013年3月21日 15:32 tsuji kuni <kunit****@gmail*****>:
> > こんにちは。
> > Kunitsujiともうします。
> >
> > $List->s1.staff_name;
> > エラーの内容を見る限り、
> > この書き方に問題がある、と言うことだとおもいます。
> > SQLの書き方のs1. staff_nameというものが、phpでは理解できない、ということではないでしょうか。
> > 細かく検証してないので、詳しくはわかりませんが、
> > SELECT  s1.staff_name as s1_staff_name
> > とか事前に変えておけば間違いはないと思います。
> > そのような複数テーブルでの全ての項目を取り出した場合、結果がどういう形で取り出せているかは、
> > var_damp等で確認してみれば、わかるかもしれませんね。
> >
> > 2013/03/21 13:03 "小島健太郎" <kojim****@gmail*****>:
> >
> >> すみません、あとは解決できるつもりでしたが
> >> 解決できなかったので再度相談させてください。
> >>
> >> 同問題でModel側で1つのマスタを複数回参照した後、
> >> ControllerとViewで下記のような流れでデータを取り出そうと
> >> していますが、予想と異なりうまくいきませんでした。
> >>
> >> //Model
> >> function getList(){
> >>
> >>   $this->db->select("*");
> >>   $this->db->from(t_daichou as d);
> >>   $this->db->join("m_staff as s1","d.uke_id=s1.staff_id","left");
> >>   $this->db->join("m_staff as s2","d.tai_id=s2.staff_id","left");
> >>   $this->db->join("m_staff as s3","d.update_id=s3.staff_id","left");
> >>
> >>   return $this->db->get();
> >> }
> >>
> >> //Controller
> >> function listAll(){
> >>   $data[rsList] = $this->m_sample->getList();
> >>   $this->load->view('v_listAll',$data);
> >> }
> >>
> >> //View
> >> foreach($rsList->result() as $List){
> >>   //test
> >>   echo $List->s1.staff_name;
> >>   echo $List->s2.staff_name;
> >>   echo $List->s3.staff_name;
> >> }
> >>
> >> エラーの内容
> >> Undefineed property:stdClass::$s1
> >> FIlename:libraries/Loader.php(673):eval()'d code
> >>
> >> これもまた何かViewでの記述方法があるのでしょうか?
> >> (Codeigniter以前の未熟な問題だったらすみません)
> >> たびたび申し訳ありません、宜しくお願い致します。
> >>
> >> 小島
> >>
> >> *********************************
> >>
> >> 2013年3月21日 9:57 小島健太郎 <kojim****@gmail*****>:
> >> > お世話になっております。
> >> > 質問者です。
> >> > ご回答ありがとうございます。
> >> >
> >> > みなさまからアドバイス頂いたように
> >> >
> >> >   $this->db->join("m_staff as s1","d.uke_id=s1.staff_id","left");
> >> >   $this->db->join("m_staff as s2","d.tai_id=s2.staff_id","left");
> >> >   $this->db->join("m_staff as s3","d.update_id=s3.staff_id","left");
> >> >
> >> > の書き方で正常に動作することを確認することができました。
> >> > 大変助かりました。
> >> > また、アクティブレコードを使用することのメリットも大変参考になりました。
> >> >
> >> > 今後ともよろしくお願いいたします。
> >> >
> >> > 小島
> >> >
> >> >
> >> > ****************************************
> >> >
> >> > 2013年3月20日 18:27 齊藤保 <saito****@jin-s*****>:
> >> >> 戸田様
> >> >>
> >> >> ご教示ありがとうございます。
> >> >> とてもよく理解出来ました。
> >> >> 弊社でも少し研究してみます。
> >> >>
> >> >>
> >> >>
> >> >> 2013年3月20日 15:27 戸田 広 <info****@sciss*****>:
> >> >>
> >> >>> こんにちは、戸田です。
> >> >>>
> >> >>> 弊社では、上記の記述を見て分かる通り、アクティブレコードを
> >> >>> 使用するのとSQLを自前で組むことの差異を感じられなかったため
> >> >>> 使用しない選択をしたのですが、アクティブレコードを使用する事の
> >> >>> メリット等ありましたら、ご教示いただけるとありがたいです。
> >> >>>
> >> >>>
> >> >>> 私がすぐ思いつく大きな違いは 2点ありまして、
> >> >>> その違いは、開発内容で言えば
> >> >>> 初期条件が FIX して変わりにくい委託開発よりも
> >> >>> 常に変化・柔軟な対応を求められる
> >> >>> 自社パッケージの開発・展開などで利いてくると思っています。
> >> >>>
> >> >>>
> >> >>> 1. Active Record を使うと、仮に RDBMS が変わることになっても
> >> >>>    Model のコードを変更する必要がありません。
> >> >>>
> >> >>> 2. CodeIgniter では、 Active Record を使うと
> >> >>>    /application/config/database.php で設定できる dbprefix が
> >> >>>    すべての SQL に対して自動的に付与されるようになっています。
> >> >>>    dbprefix を変更する時は、 database.php を書き換えるだけで
> >> >>>    Model のコードを変更せずに、一元的に変更できます。
> >> >>>
> >> >>>
> >> >>>
> >> >>> 以上です。
> >> >>>
> >> >>>
> >> >>>
> >> >>> On 2013/03/20, at 12:56, 齊藤保 wrote:
> >> >>>
> >> >>> 横入りで失礼いたします。
> >> >>> JIN SOFTWAREという会社で、自社製品に
> >> >>> CodeIgniterを使用させていただいている齊藤と申します。
> >> >>> よろしくお願いいたします。
> >> >>>
> >> >>> アクティブレコードは弊社では使用しておらず、
> >> >>> SQLをダイレクトに組んで投げる方式をとっておりますが、
> >> >>> アクティブレコードが引数を元に最終的にはSQLを組み上げる
> >> >>> ものであるならば、下記のような書き方になるのかと、
> >> >>> 推測します。
> >> >>>
> >> >>>   $this->db->select("*");
> >> >>>   $this->db->from(t_daichou as d);
> >> >>>   $this->db->join("m_staff as s1","d.uke_id=s1.staff_id","left");
> >> >>>   $this->db->join("m_staff as s2","d.tai_id=s2.staff_id","left");
> >> >>>   $this->db->join("m_staff as s3","d.update_id=s3.staff_id","left");
> >> >>>
> >> >>> これによって内部的に
> >> >>> select * from t_daichou as d
> >> >>>              left join m_staff as s1 on d.uke_id=s1.staff_id
> >> >>>              left join m_staff as s2 on d.tai_id=s2.staff_id
> >> >>>              left join m_staff as s3 on d.update_id=s3.staff_id
> >> >>>
> >> >>> というSQLが投げられるようならこれでいけるかと
> >> >>> 思います。
> >> >>>
> >> >>> 弊社では、上記の記述を見て分かる通り、アクティブレコードを
> >> >>> 使用するのとSQLを自前で組むことの差異を感じられなかったため
> >> >>> 使用しない選択をしたのですが、アクティブレコードを使用する事の
> >> >>> メリット等ありましたら、ご教示いただけるとありがたいです。
> >> >>>
> >> >>> ちなみに弊社では今後も自社製品(受注も含め)には全て
> >> >>> CodeIgniterを使用する計画でおります。
> >> >>> session周りで若干バグ臭い動きもありますが、回避出来ない
> >> >>> レベルでなく、何より敷居の低さ、手軽さが魅力で、軽量なのに
> >> >>> 必要な機能が揃っていると実感しています。
> >> >>>
> >> >>> 導入の際には日本CodeIgniterユーザ会の発信される情報を
> >> >>> 頼りにさせていただきました。あらためて御礼申し上げます。
> >> >>>
> >> >>> 今後ともよろしくお願い申し上げます。
> >> >>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> 2013年3月19日 18:57 Kenichi Hayashi <kenic****@gmail*****>:
> >> >>>>
> >> >>>> 林です。こんにちは。
> >> >>>>
> >> >>>> > 要は同じテーブルをleftjoinで複数回参照する場合の書き方ですが、
> >> >>>> > 何かそのような記述方法というものがあるのででしょうか?
> >> >>>>
> >> >>>> m_staffにそれぞれエイリアスを指定してみてはどうでしょう。
> >> >>>>
> >> >>>> "m_staff as s1"
> >> >>>> "m_staff as s2"
> >> >>>> "m_staff as s3"
> >> >>>>
> >> >>>> のような感じで。
> >> >>>>
> >> >>>> --
> >> >>>> Kenichi Hayashi
> >> >>>>
> >> >>>> _______________________________________________
> >> >>>> Codeigniter-users mailing list
> >> >>>> Codei****@lists*****
> >> >>>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >> >>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> --
> >> >>> /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >> >>> /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >> >>>
> >> >>> 〒167-0043  東京都杉並区上荻1-16-3 森谷ビル4B
> >> >>>    JIN SOFTWARE株式会社
> >> >>>            代表取締役 齊藤 保
> >> >>> TEL: 03-6915-1215 FAX: 03-6915-1216
> >> >>> Mobil: 090-4416-0111
> >> >>> Mail  saito****@jin-s*****    WEB http://jin-soft.jp
> >> >>>
> >> >>> /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >> >>> /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >> >>> _______________________________________________
> >> >>> Codeigniter-users mailing list
> >> >>> Codei****@lists*****
> >> >>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >> >>>
> >> >>>
> >> >>>
> >> >>> _______________________________________________
> >> >>> Codeigniter-users mailing list
> >> >>> Codei****@lists*****
> >> >>> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >> >>>
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >> >> /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >> >>
> >> >> 〒167-0043  東京都杉並区上荻1-16-3 森谷ビル4B
> >> >>    JIN SOFTWARE株式会社
> >> >>            代表取締役 齊藤 保
> >> >> TEL: 03-6915-1215 FAX: 03-6915-1216
> >> >> Mobil: 090-4416-0111
> >> >> Mail  saito****@jin-s*****    WEB http://jin-soft.jp
> >> >>
> >> >> /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >> >> /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> >> >>
> >> >> _______________________________________________
> >> >> Codeigniter-users mailing list
> >> >> Codei****@lists*****
> >> >> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >> >>
> >>
> >>
> >>
> >> --
>
> >>
> >> _______________________________________________
> >> Codeigniter-users mailing list
> >> Codei****@lists*****
> >> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >
> >
> > _______________________________________________
> > Codeigniter-users mailing list
> > Codei****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >
>
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
ダウンロード 



Codeigniter-users メーリングリストの案内
アーカイブの一覧に戻る