一个关于 foreach 的很奇怪的问题。

2019-09-26 13:31:25 +08:00
 JingNi
$a=[1,3,5,6,7,8,12,13];
foreach ($a as $a_id) { //对数组中的每一位成员进行查询
$price=DB::table('market_hour')->where('$a_id', $id)->orderBy('day_time', 'desc')->first();
echo $price->day_time; //day_time 为数据库中某个字段
}

输出错误:Trying to get property 'day_time' of non-object
于是我把:echo $price->day_time;
改为:echo $price->asdfasdf; //一个不存在的数据库表
报错:Undefined property: stdClass::$asdfasdf


接着我把 foreach 注释掉,并直接在段首定义$a_id=1;
执行成功,返回正常。
这是为啥,两种方法中的$a_id 不都一样的吗$a 也是整数数组呀
4536 次点击
所在节点    PHP
6 条回复
Dogergo
2019-09-26 13:46:31 +08:00
1.这个和 foreach 一毛钱关系都没有。

2.为什么要循环查询!!!每次看到再循环里查询的都想捶死!!!

3.单引号不解释变量,你的'$a_id'是个啥?

4.Trying to get property 'day_time' of non-object 为什么不打印一下$price 看看呢?
yuann72
2019-09-26 13:53:45 +08:00
很简单的问题
Trying to get property 'day_time' of non-object
foreach 某个 id 的 sql 执行结果为 null,所以$price===null,所以报错


Undefined property: stdClass::$asdfasdf
就是单纯不存在这个属性
zhuzhibin
2019-09-26 14:05:02 +08:00
不要循环查库 宁可一次查出来 然后再拼装数据
techone
2019-09-26 14:09:32 +08:00
$id 是什么,
根据 id 批量查询,用 `in`
```php
DB::table('market_hour')->whereIn('id', $a)->orderBy('day_time', 'desc')->get();
```
JingNi
2019-09-26 14:24:42 +08:00
@techone
回复楼上:老哥,不好意思
原句是:$price=DB::table('market_hour')->where('currency_id', $currency_id)->orderBy('day_time', 'desc')->first();
$id 是我写问题的时候为了隐藏变量重写的,写错地方了,正如你所纠正的一样,意思就是这样。

谢谢大家,果然是数组中某个成员中的查询结果为空,导致某个流程发生错误,问题已经解决。qwq
cbasil
2019-09-27 08:24:59 +08:00
循环查询数据库,不怕被老大跟产品锤死。。。先循环出 id 集合,用 whereIn ()查询岂不是快很多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/604401

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX