Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/cakephp/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CakePHP中查找两个连接表中的by条件_Cakephp - Fatal编程技术网

如何在CakePHP中查找两个连接表中的by条件

如何在CakePHP中查找两个连接表中的by条件,cakephp,Cakephp,在我的CakePHP应用程序中,我有三个表: 企业,城镇和类别 一个企业可以属于多个城镇和多个类别,因此我创建了连接表,并且有许多和属于关系。通过使用Town或Category模型进行搜索,按城镇或类别查找企业时,一切正常,但当我想搜索某个城镇和某个类别的企业时,我完全陷入了困境,例如伦敦的水管工 在使用业务模型进行搜索时,关联似乎不起作用,在尝试使用关联表时,我发现列未找到错误。我认为这将是需要做的事情,但我无法让它发挥作用: $this->set('listings', $this-&

在我的CakePHP应用程序中,我有三个表:

企业
城镇
类别

一个企业可以属于多个城镇和多个类别,因此我创建了连接表,并且
有许多
属于
关系。通过使用Town或Category模型进行搜索,按城镇或类别查找企业时,一切正常,但当我想搜索某个城镇和某个类别的企业时,我完全陷入了困境,例如伦敦的水管工

在使用业务模型进行搜索时,关联似乎不起作用,在尝试使用关联表时,我发现
列未找到
错误。我认为这将是需要做的事情,但我无法让它发挥作用:

$this->set('listings', $this->Business->find('all', array(
    'conditions' => array(
        'Business.approved' => 1,
        'BusinessesCategory.category_id' => $id,
        'BusinessesTown.town_id' => $town_id,
        'Business.sasite' => 1
)

要做到这一点,您需要加入表。 我将在上面举一个例子,说明如何处理类别,您可以自己处理城镇

$this->Business->find("all", array(
        "joins" => array(
            array(
                "table" => "businness_categories",
                "alias" => "BusinessesCategory",
                "type" => "LEFT",
                "conditions" => array(
                    "Businesses.id = BusinessesCategory.business_id"
                )
            ),
            array(
                "table" => "categories",
                "alias" => "Category",
                "type" => "LEFT",
                "conditions" => array(
                    "BusinessesCategory.category_id = Category.id"
                )
            )
        ),
        'conditions' => array(
            'Business.approved' => 1,
            'Category.id' => $id,
        )
    ));
您还可以使用一种行为来为您做到这一点:

嗨,我有一个非常相似的设置和相同的问题。这就是我将如何解决您的问题:
由于您没有将大部分代码泄露给他人,我做了一些假设:
-您在BusinessController中实现了搜索方法
-城镇的搜索参数存储在vaiable$where中,类别的搜索参数存储在$WHERT中

如果只有一个表的条件,则编码

如果有两个表的条件,则编码

你可以用

$this->Business->find('all', array(
    'conditions' => array(
          'AND' => array(
             'BusinessesTown.town_id' => $town_id,
             'BusinessesCategory.category_id' => $id
        )
      ),
    'recursive' => 2
));
    $this->Businesses->Town->recursive = -1;
    $this->Businesses->Category->recursive = -1;
    ....
    $options['joins'] = array(
            array('table' => 'towns',
            'alias' => 'Town',
            'type' => 'inner',
            'conditions' => array(
                'Business.town_id = Town.id',
            )
            ),
           array('table' => 'categories',
            'alias' => 'Category',
            'type' => 'inner',
            'conditions' => array(
                'Business.category_id = category.id',
            )
            )
        );
        $options['conditions'] = array( 
                'Town.townName' => $where,
            'Category.categoryName' => $what
        );
        $result = $this->Business->find('all', $options);
$this->Business->find('all', array(
    'conditions' => array(
          'AND' => array(
             'BusinessesTown.town_id' => $town_id,
             'BusinessesCategory.category_id' => $id
        )
      ),
    'recursive' => 2
));