0

CakePHP バージョン: 2.X

質問をより明確にするために、この投稿を完全に編集しました。
5 つのテーブルを含むプロの提案システムを作成しています。

プロポーザル........> ID - 名前 - コンテンツ - 作成された
クライアント........> ID - 名前 - コンテンツ - 作成された - プロポーザル ID
製品...... ....> id - 名前 - コンテンツ - 作成済み - client_id
仕様..> id - 名前 - コンテンツ - 作成済み - product_id
付録.....> id - 名前 - コンテンツ - 作成済み - product_id

この例では、列を単純化しました。

したがって、関連付けは次のとおりです。

プロポーザル > HasMany > クライアント
クライアント > BelongsTo > プロポーザル / クライアント > HasMany > 製品
製品 > BelongsTo > クライアント / 製品 > HasMany > 仕様
製品 > BelongsTo > クライアント / 製品 > HasMany > 付録
仕様 > BelongsTo > 製品 BelongsTo > 製品

次に、上記の関連付けで 5 つのモデルを作成しました。

次のようになります。

提案 1
....クライアント 1
........製品 1 ....
仕様 1 ....
仕様 2
.... .........仕様 3
..........付録 1
..........付録 2
........製品 2
.. ..........仕様 4
..........仕様 5
..........付録 3
.......... ..付録 4

提案 2
....クライアント 2
........製品 3
..........仕様 6
..........仕様 7
.... .........仕様 8
..........付録 5
..........付録 6
........製品 4
.. ..........仕様 9
..........仕様 10
..........付録 7
.......... ..付録8

等々...

私の質問は、このような配列を取得し、ProposalController.php アクションのビュー index.ctp でこれらすべての情報を取得するにはどうすればよいですか?

よろしくお願いします。

4

1 に答える 1

1

最終的に、containable 動作を使用して必要なものを構築することに成功しましたが、解決できない問題が発生しました。提案 ID を取得し、それに関連付けられているクライアント、製品、仕様、および付録を表示したいと考えています。

そのために、ProposalsController.php でビュー アクションを次のように作成しました。

function admin_view($id){
        $this->loadModel('Client');
        // $d = $this->Proposal->find('all', array(
        $d['proposals'] = $this->Proposal->find('all', array(
            'conditions' => array('Proposal.id' => $id),
            //'contain' => array() Tableau vide pour supprimer les liaisons
            'contain' => array('Client' => array(
                'fields' => array('id','name'),
                'Product' => array(
                    'Specification', 'fields'=>array('id','name'),
                    'Appendice', 'fields'=>array('id','name')
                    )
                ))
            ));
        $this->set($d);
        // debug($d);
    }

私は自分の状態でそのIDを介して特定の提案を取得しています。次に、ma クエリを admin_view.ctp に送信します。

<h1>VIEW</h1>

<?php
// debug($proposals);
?>

<p>
    Proposition : <strong><?php echo $proposals[0]['Proposal']['name']; ?></strong>
    pour le client <strong><?php echo $proposals[0]['Client']['name']; ?></strong>
    ayant le produit <strong><?php echo $proposals[0]['Client']['Product'][0]['name']; ?></strong>
    avec la spec <strong><?php echo $proposals[0]['Client']['Product'][0]['Specification'][0]['name']; ?></strong>
    et l'annexe <strong><?php echo $proposals[0]['Client']['Product'][0]['Appendice'][0]['name']; ?></strong>
</p>

それは機能しますが、特に[0]を使用しなければならない方法はかなり混乱しているようです。また、プロポーザルに製品も仕様書も付録も含まれていない場合、それらはもちろん存在しないため、エラーになります。

コードを再配置してビューを単純化し、より意味のあるものにするにはどうすればよいですか?

また、以下はコントローラーのビューアクションからコメントを外した debug($d) です:

array(

        (int) 0 => array(
            'Proposal' => array(
                'id' => '1',
                'name' => 'Proposal 1',
                'created' => '2013-02-15 00:00:00',
                'modified' => '2013-02-16 03:00:47',
                'due' => '2013-02-28 00:00:00',
                'content' => 'Terms and conditions of the proposal 1.'
            ),
            'Client' => array(
                'id' => '1',
                'name' => 'Client 1',
                'Product' => array(
                    (int) 0 => array(
                        'id' => '7',
                        'name' => 'produit 1',
                        'client_id' => '1',
                        'Specification' => array(
                            (int) 0 => array(
                                'id' => '8',
                                'name' => 'spec 1 produit 1',
                                'value' => 'value 1 produit 1',
                                'product_id' => '7'
                            ),
                            (int) 1 => array(
                                'id' => '9',
                                'name' => 'spec 2 produit 1',
                                'value' => 'value 2 produit 1',
                                'product_id' => '7'
                            )
                        ),
                        'Appendice' => array(
                            (int) 0 => array(
                                'id' => '12',
                                'name' => 'Annexe 1 produit 1',
                                'content' => 'content annexe 1 produit 1',
                                'product_id' => '7'
                            )
                        )
                    ),
                    (int) 1 => array(
                        'id' => '8',
                        'name' => 'produit 2',
                        'client_id' => '1',
                        'Specification' => array(
                            (int) 0 => array(
                                'id' => '10',
                                'name' => 'spec 1 produit 2',
                                'value' => 'value 1 produit 2',
                                'product_id' => '8'
                            ),
                            (int) 1 => array(
                                'id' => '11',
                                'name' => 'spec 2 produit 2',
                                'value' => 'value 2 produit 2',
                                'product_id' => '8'
                            ),
                            (int) 2 => array(
                                'id' => '12',
                                'name' => 'spec 3 produit 2',
                                'value' => 'value 3 produit 2',
                                'product_id' => '8'
                            )
                        ),
                        'Appendice' => array(
                            (int) 0 => array(
                                'id' => '13',
                                'name' => 'Annexe 1 produit 2',
                                'content' => 'content annexe 1 produit 2',
                                'product_id' => '8'
                            )
                        )
                    )
                )
            )
        ),
        (int) 1 => array(
            'Proposal' => array(
                'id' => '1',
                'name' => 'Proposal 1',
                'created' => '2013-02-15 00:00:00',
                'modified' => '2013-02-16 03:00:47',
                'due' => '2013-02-28 00:00:00',
                'content' => 'Terms and conditions of the proposal 1.'
            ),
            'Client' => array(
                'id' => '2',
                'name' => 'Client 2',
                'Product' => array()
            )
        )
    )

ID 1 の提案を意味する必要なものを取得しますが、その下には、最初の配列 (int) 0 に既にあるため、必要のない 2 つのモデルの提案とクライアントの関連付けを表示する別の配列があります。

私は何を間違っていますか?

助けてくれてどうもありがとう!

于 2013-02-17T09:19:47.680 に答える