通过搜索过滤器从关联模型获取数据

时间:2016-03-02 06:01:39

标签: cakephp

我对cakephp中的搜索过滤器有疑问。没有使我的问题复杂化,下面是我想要的结构......

1)我有一个项目表。

2)另一个是project_funder_names表,它与projects表相关联。 project_id位于project_funder_names表中。我已经制作了project_funder_names表,因为我需要一个项目的多个出资者名称,这就是为什么我制作了这个表。

3)现在主要的一点是我想要如果我在搜索过滤器中搜索多个资助者,这是带有复选框的下拉列表,我将根据这些值获得项目详细信息。怎么会发生。

这是我的cakephp找到所有查询....

$project_info = $this->Project->find('all', array(
'conditions' =>
     array(
         'Project.status' => 1,
         'OR' => array($search)),
         'fields' => array('id', 'title', 'short_description', 'budget_allocation', 'currency', 'total_comments', 'published_date'),
         'contain' => array(
               'ProjectFunderName' => array(
                   'conditions' => array($search_funder)),
               'Currency' => array('currency_symbol'),
               'ProjectBookmark' => array('project_id', 'user_id')
          )
    )
);

问题出在$search_funder

请帮帮我...谢谢。

1 个答案:

答案 0 :(得分:1)

看起来您需要根据相关模型搜索结果。使用可包含行为的一个缺点是,如果您尝试将条件分配给关联模型,则无论如何都将检索主模型。

如果您想要根据相关模型的条件检索主记录和相关记录,我建议您使用join。

$joins = array(
  array('table' => 'project_funder_names',
    'alias' => 'ProjectFunderName',
    'type' => 'LEFT',
    'conditions' => array('ProjectFunderName.project_id = Project.id')
   ),
   array('table' => 'currencies',
    'alias' => 'Currency',
    'type' => 'LEFT',
    // It's unclear how currencies is associated with the other tables. Use appropriate table join condition here
   ),
   array('table' => 'project_bookmarks',
    'alias' => 'ProjectBookmark',
    'type' => 'LEFT',
     'conditions' => array('ProjectBookmark.project_id = Project.id')
   )
 )
);

$project_info = $this->Project->find('all', 
     array(
       "joins" => $joins,
       "fields" => array(.........)  // Specify all your desired fields here
       "conditions" => array(....)  // Specify all conditions for Project, ProjectFunderName models.
      )
 );

希望这有帮助。

和平!的xD