使用all()的Yii2查询返回的数据少于预期的

时间:2019-09-06 09:52:29

标签: php yii2

我要使用此查询从数据库中查找所有数据:

 $dataSearch = House::find()
   ->select(["number","DATE(reg_date) AS date","((value) > 100) AS result","info"])
   ->join("INNER JOIN", Owner::tableName(), Owner::tableName().'.number_ow= '.House::tableName().'.number_ow')
   ->andWhere([House::tableName().'.number_ow'=>$house->number_ow])
   ->andFilterWhere([House::tableName().'.space'=>$space])
   ->orderBy([House::tableName().'.reg_date'=>SORT_DESC,'info'=>SORT_ASC]);


    $data = $dataSearch->asArray()->all();

如果我使用all()执行查询,则仅返回部分结果,但是如果我对数据库执行原始SQL查询,则会得到所有结果。我不明白问题出在哪里。

这是原始SQL:

SELECT `number`, DATE(reg_date) AS date, ((value) > 100) AS result, `info` 
FROM `ho_house` INNER JOIN `ho_owner` ON ho_owner.number_ow = oh_ho_house.number_ow 
WHERE (`ho_house`.`number_ow`=2100174106) AND (`ho_house`.`space`='m')
ORDER BY `ho_house`.`reg_date` DESC, `info`

2 个答案:

答案 0 :(得分:0)

在哪里替换并在哪里检查此代码

 $dataSearch = House::find()
   ->select(["number","DATE(reg_date) AS date","((value) > 100) AS result","info"])
   ->join("INNER JOIN", Owner::tableName(), Owner::tableName().'.number_ow= '.House::tableName().'.number_ow')
   ->where([House::tableName().'.number_ow'=>$house->number_ow])
   ->andFilterWhere([House::tableName().'.space'=>$space])
   ->orderBy([ClosedOperation::tableName().'.reg_date'=>SORT_DESC,'info'=>SORT_ASC]);


    $data = $dataSearch->asArray()->all();

答案 1 :(得分:0)

这是因为ActiveQuery试图从JOIN查询结果中删除重复的模型(例如,如果房屋有2个所有者,房屋数据将在结果集中重复两次)。对于您的情况,如果要从数据库中获取数据,则应使用Query

$dataSearch = (new Query())
   ->select(["number","DATE(reg_date) AS date","((value) > 100) AS result","info"])
   ->from(House::tableName())
   ->join("INNER JOIN", Owner::tableName(), Owner::tableName().'.number_ow= '.House::tableName().'.number_ow')
   ->andWhere([House::tableName().'.number_ow'=>$house->number_ow])
   ->andFilterWhere([House::tableName().'.space'=>$space])
   ->orderBy([House::tableName().'.reg_date'=>SORT_DESC,'info'=>SORT_ASC]);


$data = $dataSearch->all();

但是,如果您确实需要ActiveQuery,则应该配置$indexBy为每一行返回唯一ID。