1

クエリの結果をフィルタリングしようとしています。ユーザーは自分と同じ company_group_id を持つ会社しか表示できないため、モデルの beforeFind 関数にその条件を追加することにしました。

function beforeFind($queryData) {
    App::uses('CakeSession', 'Model/Datasource');
    $user = CakeSession::read('Auth.User');
    $queryData['conditions']['Company.company_group_id'] = $user['company_group_id'];
    parent::beforeFind($queryData);
}

$queryData を pr() すると、この状態が表示されます。

Array
(
[conditions] => Array
    (
        [Company.company_group_id] => 2
    )

)

残念ながら、ページネーションを呼び出すと、結果のクエリはこの条件を無視します

SELECT `Company`.`id`, ... WHERE 1 = 1 GROUP BY `Company`.`id` ORDER BY `Company`.`name` asc LIMIT 10

私はこれを正しくやっていますか?または、正しいレコードをユーザーに表示する別の方法はありますか?

4

1 に答える 1

0

コントローラーのアクションでページネーションの動作を構成する必要があります (詳細はこちら)。

//obtaining the company_group_id
$user = CakeSession::read('Auth.User');
$id = $user['company_group_id'];

//setting the pagination conditions (similar to a find())
$this->paginate = array(
    'conditions' => array('Company.company_group_id' => $id),
);

$data = $this->paginate('Company');
$this->set('data', $data);
于 2012-08-07T13:10:22.573 に答える