关于1对1插入
请问老师,调用定义关联方法 VideoFile,然后赋值为 VideoFile 的实例。这一步操作是什么意思?实在没看懂。
这里 return 的返回值是什么?
正在回答
同学你好,
单独调用VideoFile()(model("Video")->VideoFile();)方法是实例化表(与Video表没有任何关系)。调用VideoFile(model("Video")->VideoFile)属性,可以理解为VideoFile属性是video(model)的‘附属品’,只有调用video(model)后才可以使用VideoFile属性。所以在添加时调用属性,会找不到相关的id(报错)。
在还没有使用save方法时两个数据表中都还没有添加数据。model("VideoFile")实例化表了但与Video表并没有关联起来也就是说与Video表没有关系,所以并不能一起添加入库。所以需要赋值给VideoFile属性。
在一对一关系里添加数据不一定要实例化VideoFile表,使用数组也可以达到效果。代码如下:
<?php public function index() { // 1vs1 插入 model("Video")->title = "1VS1-add-test"; model("Video")->image = "1vs1.gif"; $data['status']=1; $data['file']="1vs1.flv"; model("Video")->VideoFile = $data; dump(model("Video")->together("VideoFile")->save()); } ?>
祝学习愉快!
老师别怪我问题多,我实在是弄不明白,手册也找不到相应的解释!
1. 我如果单独调用 VideoFile 方法是这样的,这是不是VideoFile的对象实例?
但是我如果调用的是 VideoFile 属性,就会报错,id找不到,这是什么原因呢?为什么调用方法和属性会有区别?
2. 这里在没有进行save之前,红框1的插入操作应该是没有真正的插入吧?但是这时候model("VideoFile")实例中已经有了这个新增数据了吗? 但是我还是不明白为什么要赋值给VideoFile方法,此时此刻的 model("Video")->VideoFile 到底是什么?而且我注释掉中间那步操作后,SQL中就不会对VideoFile进行新增操作了,这是什么原理??
- 参与学习 人
- 提交作业 225 份
- 解答问题 3372 个
掌握用PHP开发互联网网站的必备功能,掌握当下主流的Linux系统开发,并熟练使用热门框架ThinkPhp开发电商团购项目,是通向PHP工程师必经之路。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星