0

PlansPlanDetailsの2つのモデルがあります。

関係は次とおりです。PlanDetailshasManyPlansプランはPlanDetailsに属します。

PlanDetails view.ctpで、関連するプランを取得しています。

プランを任意のフィールドで並べ替えようとしています(すべて試しました)が、機能しません。とてもシンプルなものを見落としていると思います。

これが私のベースコードです:

PlanDetail >> view.ctp:

...foreach ($planDetail['Plan'] as $plan_edit) :
$class = null;
if ($i++ % 2 == 0) {
    $class = ' class="altrow"';
}...

<?php echo $this->Paginator->sort('Plan ID', 'Plan.id'); ?>...

...<?php echo $plan_edit['id']; ?>

plan_details_controller.php:

...function view($id = null) {
    if (!$id) {
        $this->Session->setFlash(__('Invalid plan detail', true));
        $this->redirect(array('action' => 'index'));
    }
    $this->PlanDetail->recursive = 2; // To run the editable form deeper.
    $this->set('planDetail', $this->PlanDetail->read(null, $id));
    $this->set('plan', $this->paginate('Plan'));
}...

追加する必要があります。エラーはスローされず、IDフィールドのsort()矢印は期待どおりに表示されますが、どちらの方法でもクリックしてもソート順は変わりません。

4

2 に答える 2

1

申し訳ありませんが、質問自体にコメントすることはできませんが、あなたのアクションで、あなたplanDetailが読んだPlanDetailレコード(recursive2に設定)に設定し、次にplanpaginate電話。

$planDetail次に、ビューテンプレートで、次のように、含まれているPlan関連付けを繰り返し処理します。

foreach ($planDetail['Plan'] as $plan_edit):

ただし、並べ替えとページ付けを行うには、呼び出しの結果を表示する必要があります。paginateつまり、に含まれるレコードを繰り返し処理する必要があります$plan

ビューテンプレートでadebug($plan)を実行して、そこに得られる結果を確認し、さまざまなフィールドで並べ替えたときにレコードの順序が変わるかどうかを確認します。

また、私が知らない構文を使用している可能性がありますが、コントローラーを呼び出すだけでは、特定のレコード$this->paginate('Plan')に関連するレコードのみを取得することになるかどうかはわかりません。(渡されたものをレコードと結び付けるものは何もありません。)次のように、呼び出しにいくつかの条件を追加する必要がある場合があります。PlanPlanDetail$idviewPlanpaginate

$this->paginate['Plan'] = array('conditions' => array('Plan.plan_detail_id' => $id));
$this->set('plans', $this->paginate('Plan'));
于 2011-03-24T10:02:33.257 に答える
0

これが私がこれを解決するためにしたことです。johnp&tokesからのいくつかの役立つ指示に基づいています。

plan_details / view.ctp:

...$i = 0;
foreach ($plan as $plan_edit) : // note $plan here.
}...

私のplan_details_controller.phpビューアクションでは:

$conditions = array("Plan.plan_detail_id" => "$id");
$this->set('plan', $this->paginate('Plan', $conditions)); // note "plan" in the first argument of set (this is required to pass the results back to the view). Also. The $condition is set to return ONLY plans that match the plan_detail_id of id (on the plan_details table).

そして、私の見解では、結果を取得するために(配列名を変更したため)、値を取得する方法を次のように変更する必要がありました。

$plan_edit['Plan']['modified'] // note I placed ['Plan'] in front of these calls as the array called for this to get the data...

次の問題まで!解決しました。

于 2011-03-25T21:56:32.550 に答える