Dav*_*ave 4 php cakephp resultset object cakephp-3.0
TLDR: 如何使用结果对象中的第一项?
从数据库中获取数据后,我想先拉出第一个并单独使用它,然后重复其余的视频.(全部在我的模板/视图文件中).如果它是一个数组,我可以使用类似的东西array_shift,但到目前为止,对象,我是空的.
首先,我在Controller中获取数据,并将其传递给View:
$videos = $this->Videos->find();
$this->set(compact('videos'));
Run Code Online (Sandbox Code Playgroud)
然后,在视图(模板文件)中,我试过这个:
$featuredVideo = $videos{0};
Run Code Online (Sandbox Code Playgroud)
错误无法使用Cake\ORM\Query类型的对象作为数组
还有这个:
$featuredVideo = $videos->0;
Run Code Online (Sandbox Code Playgroud)
错误:语法错误,意外的'0'(T_LNUMBER),期待标识符(T_STRING)或变量(T_VARIABLE)或'{'或'$'
还有这个:
$featuredVideo = $videos->toArray()[0];
Run Code Online (Sandbox Code Playgroud)
这种工作(有点),但是我必须使用它$featuredVideo作为一个数组,这与其他地方不同,并且看起来不优雅.
还有这个:
$featuredVideo = $videos->first();
Run Code Online (Sandbox Code Playgroud)
这很棒,但是它将整个对象限制为只有第一个,所以我不再拥有其余的视频.
还有这个:
$allVideos = $videos;
$featuredVideo = $videos->first();
Run Code Online (Sandbox Code Playgroud)
但是,显然因为它是一个对象,$allVideos它只是对它的引用$videos,因为它们都被缩减为第一个视频.
我意识到这似乎是一个简单的问题,它可能是一个简单的答案,但我已经环顾四周,并尝试了如何从具有上述结果的对象中获取第一个项目的建议.
我无法理解的是,->find()只是返回查询对象,直到你通过一个->all()或一个->first()或通过foreach()循环运行它来告诉它.
所以,我不能只访问第一个子对象,因为查询尚未执行以显示结果.
当我->first()在设置上面的变量之后尝试做的时候,它实际上是在将limit设置为1之后对查询对象执行查询,因此两者都只有1.
更多细节在这里.
答案(代码中):
// Controller
$videos = $this->Videos->find()->all();
$this->set(compact('videos'));
// View
$featuredVideo = $videos->first();
Run Code Online (Sandbox Code Playgroud)
有关何时延迟评估查询对象的详细信息.
感谢jose_zap和marc_帮助我澄清这个.
| 归档时间: |
|
| 查看次数: |
12830 次 |
| 最近记录: |