0

我正在尝试根据从另一个查找中收到的数组在 cakePHP 中进行查找。

结构:我的数据库中有许多站点。我也有很多生意。每个企业都有一个站点,但并非所有站点都属于一个企业。我正在尝试获取销售中所有订单的列表,这些订单转到属于企业的网站。我已经完成了一个 find 方法来获取属于一个企业的所有站点,它在一个嵌套数组 ($businesses) 中返回,如下所示:

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')));

问题是当我这样做时,我得到一个数组到字符串的转换错误,因为 $businesses 是一个嵌套数组,所以 Cake 将它转换为

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

如何访问嵌套数组,以便将订单上的 site_id 与数组中每个企业的 site_id 进行比较?

4

1 回答 1

2

您不需要从返回的所有信息find()来运行下一个查询。

您基本上需要的是 SQL 的IN表达式和一个 ID 数组,它们应该像这样放置:

$this->Order->find('all', array(
    'conditions'=>array(
        'Order.site_id' => Hash::extract($businesses, '{n}.Business.site_id')
     )
));

Hash::extract()将创建一个包含在提供的路径中的 id 的数组,{n}.Business.site_id并且$businessescakephp 会注意到您在那里有一个数组,因此它将创建一个 SQLIN表达式来告诉您的数据库您希望 id 是给定的其中一个。

你应该让你以前的发现只返回你需要的东西(即 id 和主键),以减少数据库的负担。

于 2013-10-21T22:23:20.697 回答