加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何从CakePHP 3结果对象中获取第一项

发布时间:2020-12-13 17:48:28 所属栏目:PHP教程 来源:网络整理
导读:TLDR:如何使用结果对象中的第一项? 从数据库中获取数据后,我想先拉出第一个并单独使用它,然后重复其余的视频. (全部在我的模板/视图文件中).如果它是一个数组,我可以使用像array_shift这样的东西,但到目前为止,这个对象,我是空的. 首先,我在Controller中获
TLDR:如何使用结果对象中的第一项?

从数据库中获取数据后,我想先拉出第一个并单独使用它,然后重复其余的视频. (全部在我的模板/视图文件中).如果它是一个数组,我可以使用像array_shift这样的东西,但到目前为止,这个对象,我是空的.

首先,我在Controller中获取数据,并将其传递给View:

$videos = $this->Videos->find();
$this->set(compact('videos'));

然后,在视图(模板文件)中,我试过这个:

$featuredVideo = $videos{0};

Error Cannot use object of type CakeORMQuery as array

还有这个:

$featuredVideo = $videos->0;

Error: syntax error,unexpected ‘0’ (T_LNUMBER),expecting identifier (T_STRING) or variable (T_VARIABLE) or ‘{‘ or ‘$’

还有这个:

$featuredVideo = $videos->toArray()[0];

这种工作(有点),但后来我必须使用$featuredVideo作为一个数组,这与其他地方不同,并且看起来不优雅.

还有这个:

$featuredVideo = $videos->first();

这很棒,但是它将整个对象限制为只有第一个,所以我不再拥有其余的视频.

还有这个:

$allVideos = $videos;
$featuredVideo = $videos->first();

但是,显然因为它是一个对象,$allVideos只是对$视频的引用,因为它们都被缩减为第一个视频.

我意识到这似乎是一个简单的问题,它可能是一个简单的答案,但我已经环顾四周,并尝试了如何从具有上述结果的对象中获取第一个项目的建议.

解决方法

我没理解的是 – > find()只返回查询对象,直到你通过 – > all()或 – > first()或通过foreach()循环运行它来告诉它.

所以,我不能只访问第一个子对象,因为查询尚未执行以显示结果.

当我在设置上面的变量之后尝试做 – > gt; first()时,它实际上是在将limit设置为1后对查询对象执行查询,因此两者都只有1.

更多details here.

答案(代码中):

// Controller
$videos = $this->Videos->find()->all();
$this->set(compact('videos'));

// View
$featuredVideo = $videos->first();

有关when query objects are lazily evaluated的更多详细信息.

感谢jose_zap和marc_帮助我澄清这个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读