关于1对1插入

关于1对1插入

请问老师,调用定义关联方法 VideoFile,然后赋值为 VideoFile 的实例。这一步操作是什么意思?实在没看懂。
http://img1.sycdn.imooc.com//climg/5d01e2730001b8a409270305.jpg

这里 return 的返回值是什么?
http://img1.sycdn.imooc.com//climg/5d01e2d40001cadd06590265.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,

  1. 单独调用VideoFile()(model("Video")->VideoFile();)方法是实例化表(与Video表没有任何关系)。调用VideoFile(model("Video")->VideoFile)属性,可以理解为VideoFile属性是video(model)的‘附属品’,只有调用video(model)后才可以使用VideoFile属性。所以在添加时调用属性,会找不到相关的id(报错)。

  2. 在还没有使用save方法时两个数据表中都还没有添加数据。model("VideoFile")实例化表了但与Video表并没有关联起来也就是说与Video表没有关系,所以并不能一起添加入库。所以需要赋值给VideoFile属性。

  3. 在一对一关系里添加数据不一定要实例化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
    大概能理解了,还有点问题,老师说只有使用video(model)后才可以使用VideoFile属性,那么什么才算使用过 video(model)? 还有老师这个 $data 是哪里来的?
    2019-06-14 14:08:12
  • 好帮手慕小尤 回复 提问者 雨之赞歌 #2
    同学你好,调用video(model里要有关联方法)就相当于使用。$data是定义的数组,也可以定义成其他数组。祝学习愉快!
    2019-06-14 14:12:52
提问者 雨之赞歌 2019-06-14 10:22:39

老师别怪我问题多,我实在是弄不明白,手册也找不到相应的解释!
1. 我如果单独调用 VideoFile 方法是这样的,这是不是VideoFile的对象实例?
但是我如果调用的是 VideoFile 属性,就会报错,id找不到,这是什么原因呢?为什么调用方法和属性会有区别?

http://img1.sycdn.imooc.com//climg/5d0300d20001d55c09440432.jpg
http://img1.sycdn.imooc.com//climg/5d0300e00001bfdd16680940.jpg

2. 这里在没有进行save之前,红框1的插入操作应该是没有真正的插入吧?但是这时候model("VideoFile")实例中已经有了这个新增数据了吗? 但是我还是不明白为什么要赋值给VideoFile方法,此时此刻的 model("Video")->VideoFile 到底是什么?而且我注释掉中间那步操作后,SQL中就不会对VideoFile进行新增操作了,这是什么原理??
http://img1.sycdn.imooc.com//climg/5d0303060001815509100333.jpg

好帮手慕小尤 2019-06-13 14:24:52

同学你好,

  1. 将videoFile表中的字段与数据,赋值关联的videoFile方法(model)里,然后通过together进行关联操作。如果不进行赋值给关联的videoFile方法,那么时候添加一张表里的数据。

  2.  在查询时会返回数据表中的数据。在添加时(进行赋值后)会返回赋值的字段与数据。单独调用会找不到关联id(报错)。

祝学习愉快!

  • 提问者 雨之赞歌 #1
    1. model("VideoFile") 这返回的不是VideoFile表的对象实例吗?怎么是字段与数据呢?videoFile方法返回的不也是 VideoFile表的对象实例吗?这步操作有什么意义?
    2019-06-14 09:33:57
  • 好帮手慕小尤 回复 提问者 雨之赞歌 #2
    同学你好, model("VideoFile") 返回的是VideoFile表的对象实例。但model("VideoFile")->字段,是代表向实例化表中的某字段进行赋值。videoFile()方法是Video(model)有查询操作时可以直接调用。但进行添加操作时需要进行赋值否则thinkPHP会找不到关联id导致报错。祝学习愉快!
    2019-06-14 09:49:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师