我正在尝试根据我从另一个发现中收到的数组找到一种在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'
)
),
现在,我想将此数组中的数据用作另一个find方法的一部分。像这样:
$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)
如何访问嵌套数组,以便将订单上的site_id与数组中每个业务的site_id进行比较?
答案 0 :(得分:2)
您不需要从find()
返回的所有信息来运行您的下一个查询。
你基本上需要的是SQL的IN
表达式和一系列ID,它们应该像下面那样:
$this->Order->find('all', array(
'conditions'=>array(
'Order.site_id' => Hash::extract($businesses, '{n}.Business.site_id')
)
));
Hash::extract()
将创建{n}.Business.site_id
提供的路径$businesses
中包含的id数组,而cakephp会注意到你有一个数组,因此它将创建一个SQL {{1}表达式告诉你的数据库你希望id是给定的那个。
你应该让你以前的发现只返回你需要的东西(即ids和主键),以减轻数据库的负担。