CakePHP получает совпадения в array () на основе отношения hasMany - PullRequest
0 голосов
/ 25 мая 2011

PlanDetails имеет много компаний. Таблица PlanDetail имеет поле company_id.

Это все, что мне нужно для достижения: PlanDetail.company_id = Company.id. Получите все детали плана, где PlanDetail.company_id соответствует Company.id.

Вот запрос, с которым я связывался в plan_details_controller:

function pd_list_by_company() {
    $this->PlanDetail->unbindModel(array('hasMany' => array('Plan')));
    $comp_id = $this->PlanDetail->Company->find('all');
    $result = $this->PlanDetails->find('all', array('conditions' => array
('Company.id' => 'PlanDetail.company_id')));
    $company_id = $this->PlanDetail->read('company_id');
    }

Я не могу просто получить нужные мне результаты ... что я здесь не так делаю?

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Для меня это звучит как простое условие в поле company_id:

$this->PlanDetail->find('all', array('conditions' => array('company_id' => $company_id)))

Или, если вы хотите, чтобы компания тоже и ваши ассоциации правильно подключены:

$company = $this->Company->read(null, $company_id);

// echo $company['Company']
// echo $company['PlanDetail'][0], $company['PlanDetail'][1] etc...

Вам нужно получить $company_id для запроса откуда-то, обычно это URL:

public function pd_list_by_company($company_id)

Затем перейдите к этому действию с URL /plan_details/pd_list_by_company/42, который можно связать с помощью $this->Html->link('foobar', array('controller' => 'plan_details', 'action' => 'pd_list_by_company', 42)).

Полный пример:

public function view($planId) {
    $plan = $this->PlanDetail->read(null, $planId);
    if (!$plan) {
       $this->cakeError('error404');
    }
    $otherPlansBySameCompany = $this->PlanDetail->find('all', array(
        'conditions' => array('company_id' => $plan['PlanDetail']['company_id'])
    ));
    $this->set(compact('plan', 'otherPlansBySameCompany'));
}
0 голосов
/ 25 мая 2011

Я показываю результаты поиска set () в представлении Plan Detail .ctp.

Вот как я это решил:

    function view($id = null) {
    if (!$id) {
        $this->Session->setFlash(__('Invalid plan detail', true));
        $this->redirect(array('action' => 'index'));
    }
    $this->set('planDetail', $this->PlanDetail->read(null, $id));
        $cid = $this->PlanDetail->read('Company.id');
        $cid_extract = Set::extract($cid, 'Company.id');
    $this->set('planComps', $this->PlanDetail->find('all',array('conditions' => array("company_id" => $cid_extract))));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...