为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
桃花长相依 2022-01-02 17:18:52
我想使用此查询从数据库中查找所有数据: $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 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

这是因为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。


查看完整回答
反对 回复 2022-01-02
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

将 andWhere 替换为 Where 检查此代码


 $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();


查看完整回答
反对 回复 2022-01-02
  • 2 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信