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

Back to archive index

小島健太郎 kojim****@gmail*****
2013年 3月 21日 (木) 16:45:08 JST


ご回答ありがとうございます。
ご提案頂いたようにモデルを

//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 メーリングリストの案内
Back to archive index