• 締切済み

CakePHPでHBTMがpaginateで適用さ

CakePHP2.3でHBTMがpaginateで適用されない モデルでHBTMを組んだのですが、コントローラーでPaginator->paginate()しても関連モデルからの情報を取得して来ません。 なお、モデル名->find()の時は取得出来ます。 対処法があれば教えて下さい。

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

Controller のプロパティ$paginate に recursive 設定されているのでは? 一部のaction で異なる設定にするには、paginate()メソッドを呼ぶ前に、$this->paginate プロパティを編集します。 以下のような記述になります。 <?php class TestsController extends AppController { public $paginate = array( 'limit' => 30, 'recursive' => -1, ); function index(){ $this->paginate['recursive'] = 1; // $this->paginate['Test']['recursive'] = 1; /* usesに複数モデルがあるとき対象Model名配列にrecursive設定 */ $this->set('tests', $this->paginate()); } }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • cakephpの命名規則について

    cakephp初心者です。 cakephpはテーブル名、モデル名、コントローラ名、ビュー名、が規則によって付けられますが、 複数人で開発する場合、 同じテーブルを参照しようとすると、同じ名前のビューフォルダなどが出来てしまうのではないですか? テーブル名:users モデル名:User コントローラ名:UsersController ビューフォルダ:Users   ビューファイル:index.ctp usersテーブルを参照する場合、みんな同じコントローラ名、そして、ビューフォルダ名になると思うのですが、 どうやって別々のページを作っていくのですか? 上手く質問出来ていませんし、勉強不足だとは承知しています。 どうしてもCakePHPに苦戦しています。 開発の進め方を出来るだけ分かりやすく説明して頂けると嬉しいです。

    • ベストアンサー
    • PHP
  • CakePHPの仕組みについて

    現在 CakePHPを学習している者です。 たとえば BoardsController というコントローラーのクラスと、 Board というモデルのクラスがある場合、 BoardsController クラスの定義において $this->Board->find('all') などという記述が可能であると学びました。 http://goo.gl/s4m9r 「これは、 BoardsControllerクラス内において Boardクラスのインスタンスが Boardという名前で CakePHPによって自動生成されているからである。」 という私の理解は合っておりますでしようか?

    • ベストアンサー
    • PHP
  • CakePHPのfindの取得件数は?

    ご存知の方は、お教えください。 CakePHPのfindの取得件数は、どのようにされておりますか? find('count',・・・)ですか? 取得されたデータの配列をcountするのは、間違っていますか? pg_num_rows のように、読み込み時に自動的に設定される変数(?)は無いのでしょうか?

    • ベストアンサー
    • PHP
  • cakephpの質問2つ

    2つ質問させてください。 cakephpで、ホームページの左に項目を追加したいのですが (ホームページによくあるホームページ内リンク、ホームページ内の検索フォーム)、 layoutで指定できるのは、調べた限り、$title_for_layoutと$content_for_layoutだけでした。 当然、コントローラで取得した値は、メインの真ん中にしか、適応できず、左に適応させると、 今度はメインの真ん中の処理ができなくなってしまいます。 $content_for_layoutなどの変数(例:$sub_content_for_layout)を別個作る必要があるのでしょうか。また、そうであれば、 どのファイルに追記する必要がありますか。 コントローラで、ある変数を条件にfind()で1件だけレコードを取得して、そのデータをviewで使いたいのですが、 setした$dataの構造が確認できず、$arr['id']などの情報が取得できません。$data['テーブル名']としてviewに書くと、 すべてのカラムがAと表示され、うまくいきません。 controller: public function index(){ $cond = param['url']['name']; $data = $this->Table->find($cond); } view hoge.ctp: $arr = $data['Table']; foreach($data as $key){ echo $arr['id']; echo $arr['name']; echo $arr['phone']; } 以下、html~ 本やネットなどで調べましたが、当該情報が得られませんでした。お手数ですが、ご回答願えないでしょうか。

    • 締切済み
    • PHP
  • CakePHPのアソシエーションがうまくいかず困っています。

    CakePHPのアソシエーションがうまくいかず困っています。 以下の3つのテーブルがあります。 [Table_A] id_a id_b name_a [Master_B] id_b name_b [Table_C] id_c id_a name_c Table_Aを中心にアソシエーションを設定しようと思い、modelを以下のように設定しました。 [Model A] class A extends AppModel { public $name = 'A'; public $useTable = 'Table_A'; public $primaryKey = 'id_a'; public $hasOne = array( 'C' => array('className' => 'C', 'foreignKey' => 'id_c' ) ); } [Model B] class B extends AppModel { public $name = 'B'; public $useTable = 'Table_B'; public $primaryKey = 'id_b'; } [Model C] class C extends AppModel { public $name = 'C'; public $useTable = 'Table_C'; public $primaryKey = 'id_c'; } そして、Controllerを以下のように設定しました。 [Controller A] $a = $this->A->find('all'); Controller Aでfindした結果、name_aとname_cの取得には成功しました。 そこでname_bも取得しようとしたのですが、どのようにアソシエーションを設定すればよいか、わかりません。 テーブルの項目は固定であり変更できないため、なんとかこれでアソシエーションを設定したいと思っています。 マニュアルやウェブサイトを調べたのですが、わかりませんでした。 ご教授のほどよろしくお願いいたします。

    • 締切済み
    • PHP
  • CakePHPのディレクトリ構成について(app)

    CakePHPのapp内のディレクトリ名について教えてください。 CakePHPを使ってみたいと思いインストールまで実行しました。 作成したプログラムはappディレクトリ内に配置するようですが、 公式ドキュメントとapp内のディレクトリ名が違います。 バージョン:CakePHP ver 2.0.3 安定版 Cookbook(公式ドキュメント)を見ると 「2.3 CakePHPのフォルダ構造」 http://book.cakephp.org/ja/view/899/CakePHP%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E6%A7%8B%E9%80%A0 Appフォルダは controllers libs models views ・・・ と記載してあります。 実際にappディレクトリを見てみると Controller Lib Model View ・・・ というように始めの文字が大文字になっていて複数形がなくなっています。 これはバージョンの違いによるものなのでしょうか? 公式ドキュメントでappのcontrollerディレクトリにファイルを作ってアップロードとなっていたら、実際にはappのControllerディレクトリにファイルをアップロードすれば良いのでしょうか? それとも、Controllerディレクトリとは別にマニュアルと同じ名前controllerディレクトリを作成してその中にファイルをアップロードするのでしょうか?

    • ベストアンサー
    • PHP
  • cakePHP サブミット方法について

    cakePHPについて、質問があります。 以下のように、サブミット時にPHPの関数を呼び出そうとしましたが、呼び出しを行えません。 echo $form->submit('登録', array('id'=>'XX','controller' => 'controller名', 'action' => 'action名' )); お手数ですが、解決方法を教えて頂けますでしょうか? 以上です。

    • ベストアンサー
    • PHP
  • CakePHP の default.ctp に処理を書くには。

    CakePHP 初心者です。 現段階で、各 view のテンプレート1つに付き、コントローラーとモデルを用意するということを知りました。また、全体を通しての大元のテンプレートは default.ctp というファイルを用意すれば良いことも知りました。 ですが、常にサイドバーにデータベースより最新10件の投稿を取得し、出力するということがしたい場合、default.ctp に直接コードを書くしかないのでしょうか。default.ctp のコントローラーやモデルを用意することはできないのでしょうか。 とても初歩的な質問になるかと思いますが、ご回答お待ちしております。 面倒でなければ例なども頂けると幸いです。

    • 締切済み
    • PHP
  • CakePHP2 のsaveができない

    CakePHP2.何かを使っています。 ローカル環境でxampp、windows7で開発しています。 なぜかある特定のコントローラーでsaveができず、 Googleで見つけた様々な解決方法を全て試してもダメでした。 コントローラー:PaypalsController.php モデル:Paypal.php テーブル名:paypals コントローラー内で $this->Paypal->save($data); すると The eventKey variable is required An Internal Error Has Occurred のようなエラーが出ます。 キャッシュの問題であるデバッグモードも2になっています。 また、命名規則に沿っているのですが、 モデル内に、 public $useTable = 'paypals'; を書かないと、 Missing Database Table のエラーも出ます。 この時点で何かおかしい気がします。 どのような原因が考えられるか分かる方いたらアドバイス下さい。

    • ベストアンサー
    • PHP
  • cakePHPでアソシエーションが出来ない

    2つのモデル間でのhasMany-belongsTo のアソシエーションが出来ずに困っています。(cakephpのバージョンは2.4.4, php5.4,16, mysql 5.5.32) 2つのモデルは、コントローラーからそれぞれのindex()で表示できますが、外部キーで相手を指せていないようです。親からのfind('all')で、親の値しか変数に入ってきません。表記や考え方がおかしいのかもしれません。規約には沿っているつもりですので外部キーを入れないアソシエーションの指定(両モデルに対して)も試してみましたがダメでした。以下に、2つのテーブルとモデルを書きます。おかしいところを指摘して頂けると助かります。 ・GiiGestモデルにGiiPostモデルが多数ぶら下がっている構造です。(1:n) GiiGestモデル テーブル名:gii_gests  フィールド:id 主キー autoincrement ,neme varchar(128) ファイル名:gii_gest.php クラス名:GiiGest <?php class GiiGest extends AppModel{ // public $hasMany = 'GiiPost'; <- これだけでもダメでした。 public $hasMany = array( 'GiiPost' => array( 'className' => 'GiiPost', 'foreignKey' => 'gii_gest_id', <- ここいいのか疑問です? ) ); } GiiPostモデル テーブル名:gii_posts  フィールド:id 主キー autoincrement, gii_gest_id int not null ,comment varchar(255) ファイル名:gii_post.php クラス名:GiiPost <?php class GiiPost extends AppModel{ // public $belongsTo = 'GiiGest'; <- これだけでもダメでした。 public $belongsTo = array( 'GiiGest' => array( 'className' => 'GiiGest', 'foreignKey' => 'gii_gest_id' ) ); }

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • PC立ち上げ時のIMEのフォントの設定について
  • PC立ち上げ時、最初のフォントが半角英数字・直接入力(A)となっています。これをPC立ち上げ時、ひらがなモードで立ち上げることはできないのでしょうか
  • ひかりTVのサービスやISPぷららについての質問です。
回答を見る