Cakephp 在find方法中使用嵌套数组
我试图找到一种方法,根据从另一个查找中收到的数组,在cakePHP中进行查找 结构:我的数据库中有许多站点。我也有很多生意。每个企业都有一个站点,但并非所有站点都属于一个企业。我试图得到一个清单,所有订单在销售去一个网站,属于一个企业。我已经使用find方法获取了属于某个企业的所有站点,它以嵌套数组($business)的形式返回,如下所示:Cakephp 在find方法中使用嵌套数组,cakephp,Cakephp,我试图找到一种方法,根据从另一个查找中收到的数组,在cakePHP中进行查找 结构:我的数据库中有许多站点。我也有很多生意。每个企业都有一个站点,但并非所有站点都属于一个企业。我试图得到一个清单,所有订单在销售去一个网站,属于一个企业。我已经使用find方法获取了属于某个企业的所有站点,它以嵌套数组($business)的形式返回,如下所示: array( (int) 0 => array( 'Business' => array( 'id' => '1
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是否是您的目标。但我在回答中有一个大致的想法,请确保最后的评论。我在寻找两个在我检查的范围内不一致的条件。这很有效。非常感谢。