CakePHP 3-在自定义查找器中使用…选择
我写了一个方法如下:CakePHP 3-在自定义查找器中使用…选择,php,mysql,cakephp,cakephp-3.x,Php,Mysql,Cakephp,Cakephp 3.x,我写了一个方法如下: public function findSubstanceListNotifications(Query $query, array $options) { $date_start = $options['date_start']; $date_end = $options['date_end']; $list_id = $options['list_id']; $list_substances = TableRegistry::getTa
public function findSubstanceListNotifications(Query $query, array $options)
{
$date_start = $options['date_start'];
$date_end = $options['date_end'];
$list_id = $options['list_id'];
$list_substances = TableRegistry::getTableLocator()->get('TblListsSubstances')->find()
->select('substance_id')->where(['list_id IN' => $list_id])->enableHydration(false);
if ($list_substances->isEmpty()) {
return false;
}
$query = $this->find()
->select(['RevisionSubstances.date', 'RevisionSubstances.comment', 'RevisionSubstances.id', 'Substances.name', 'Substances.app_id'])
->where(['substance_id IN' => array_column($list_substances->toArray(), 'substance_id')]);
$query->where(['RevisionSubstances.date >=' => $date_start, 'RevisionSubstances.date <=' => $date_end]);
$query->contain('Substances');
$query->order(['RevisionSubstances.date' => 'DESC', 'Substances.app_id' => 'ASC']);
$query->enableHydration(false);
if ($query->isEmpty()) {
return false;
}
return $query;
}
上面的IN()
条件使用与登录用户相关的ID。然而,这个数组最多只有20个键,所以我认为这里不会有任何类似的内存问题。但是我也需要知道如何在运行子查询时访问这些
CakePHP版本是3.7
我在中阅读了有关使用
newExpr()
的内容,但看不出此时如何以一种可行的方式插入SELECT
语句。几千个键可能太多了。我不确定您对子查询的关注点是什么,但它应该可以正常工作,只需将$list\u substances
作为条件传递,如:
->其中(['substance\u id IN'=>$list\u substances])
几千个键很容易太多。我不确定您对子查询的关注点是什么,但它应该可以正常工作,只需将$list\u substances
作为条件传递,如:
->其中(['substance\u id IN'=>$list\u substances])
SELECT substance_id FROM tbl_lists_substances WHERE list_id IN(1,2,3,4);