Cakephp 在find方法中使用嵌套数组

Cakephp 在find方法中使用嵌套数组,cakephp,Cakephp,我试图找到一种方法,根据从另一个查找中收到的数组,在cakePHP中进行查找 结构:我的数据库中有许多站点。我也有很多生意。每个企业都有一个站点,但并非所有站点都属于一个企业。我试图得到一个清单,所有订单在销售去一个网站,属于一个企业。我已经使用find方法获取了属于某个企业的所有站点,它以嵌套数组($business)的形式返回,如下所示: array( (int) 0 => array( 'Business' => array( 'id' => '1

我试图找到一种方法,根据从另一个查找中收到的数组,在cakePHP中进行查找

结构:我的数据库中有许多站点。我也有很多生意。每个企业都有一个站点,但并非所有站点都属于一个企业。我试图得到一个清单,所有订单在销售去一个网站,属于一个企业。我已经使用find方法获取了属于某个企业的所有站点,它以嵌套数组($business)的形式返回,如下所示:

array(
(int) 0 => array(
    'Business' => array(
        'id' => '17',
        'name' => 'Name',
        'code' => 'Code',
        'discount' => 'Discount',
        'site_id' => 47
    )
),
(int) 1 => array(
    'Business' => array(
        'id' => '19',
        'name' => 'Name',
        'code' => 'Code',
        'discount' => 'Discount',
        'site_id' => '108'
    )
),
$this->Order->find('all', array(
            'contain'=>array("Info"),
            'conditions'=>array('Order.sale_id' => $sale, 'Order.site_id' => $businesses),
            'order'=> array('last_name' => 'ASC')));
现在,我想使用这个数组中的数据作为另一个find方法的一部分。大概是这样的:

array(
(int) 0 => array(
    'Business' => array(
        'id' => '17',
        'name' => 'Name',
        'code' => 'Code',
        'discount' => 'Discount',
        'site_id' => 47
    )
),
(int) 1 => array(
    'Business' => array(
        'id' => '19',
        'name' => 'Name',
        'code' => 'Code',
        'discount' => 'Discount',
        'site_id' => '108'
    )
),
$this->Order->find('all', array(
            'contain'=>array("Info"),
            'conditions'=>array('Order.sale_id' => $sale, 'Order.site_id' => $businesses),
            'order'=> array('last_name' => 'ASC')));
问题是,当我这样做时,我会得到一个数组到字符串的转换错误,因为$business是一个嵌套数组,所以Cake会将其转换为

AND `Order`.`site_id` IN (Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array, Array)

如何访问嵌套阵列,以便将订单上的站点id与阵列中每个企业的站点id进行比较?

运行下一个查询时,不需要从
find()
返回所有信息

您基本上需要的是SQL在表达式中的
,以及一个ID数组,这些ID应该放在如下位置:

$this->Order->find('all', array(
    'conditions'=>array(
        'Order.site_id' => Hash::extract($businesses, '{n}.Business.site_id')
     )
));
将创建包含在提供的路径
{n}.Business.site_id
中的id数组,cakephp将注意到您在那里有一个数组,因此它将在
表达式中创建一个SQL的
,告诉您的数据库您希望id是给定的id之一


您应该使以前的查找只返回您需要的内容(即ID和主键),以减轻数据库的负担。

您不需要在
中使用Cake指定
,如果您的比较是一个数组,则假定它返回。现在它返回一个空数组。至于之前的发现,我在另一种方法中使用了该发现。我只是将结果传递给这个函数,因为它有我需要的信息。如果需要,请保留它:)如果没有得到任何结果,则表示没有与条件匹配的数据。检查您的条件是否正确,以及生成的SQL是否是您的目标。但我在回答中有一个大致的想法,请确保最后的评论。我在寻找两个在我检查的范围内不一致的条件。这很有效。非常感谢。