zoukankan      html  css  js  c++  java
  • 【laravel5.4 + TP5.0】hasOne和belongsTo的区别

    1、从字面理解:假如A比B大,那么A hasOne B; B belongsTo A;

    2、个人总结:

    3、从代码角度:

    主要是看你是在哪一个model(模型)中编写这个关联关系,父关联对象就是在父关联model(本文是在Products的model类)下编写的关联模型。


    has_one(或has_many):外键在子关联对象中

    //父关联对象表
    Products{
     id
     product_name
    }
    //子关联对象表
    Image{
     image_id
     img_name
     product_id    //foreign key
    }
    
    //hasOne方法的参数包括:
    //hasOne('关联模型名','外键名','主键名',['模型别名定义'],'join类型');
    //默认的join类型为INNER
    //写在Products的model类中
    public function Img(){
      $this->hasOne('Image','product_id','id');
    }

    belongs_to:外键在你父联对象中

    //父关联对象表:
    Product{
     product_id
     img_id    //foreignkey
     product_name
    }
    //子关联对象表
    Image{
     id      
     img_name
    }
    
    
    //belongsTo方法的参数包括:
    //belongsTo(‘关联模型名’,‘外键名’,‘关联表主键名’,[‘模型别名定义’],‘join类型’);
    //默认的join类型为INNER
    //写在Products的model类中
    public function Img(){
    $this->belongsTo('Image','img_id','id');
    }

    laravel5.4中hasOne和belongsTo、hasMany区分:

    /* 
             * 下面三种写法:第一种会报错(前提:在Admin模型写入users表的模型关系hasOne、belongsTo和hasMany)
             * 因为User模型,我们并没有写入position的模型关联方法 
             * 而Admin::XX 和new Admin 不报错,因为写入了position方法
             */
            $users =  new AppAdmin();
            $uuu = User::find($this->user_id)->position->pos_name;
            var_dump($uuu);
            $users =  new AppAdmin();
            $uuu = $users::find($this->user_id)->position->pos_name;
            var_dump($uuu);
            $uuu = Admin::find($this->user_id)->department->dep_name;
            var_dump($uuu);

    //依据一个部门只能属于一个公司,而一个部门却可以有多个user,gogo

    //$company_msg = Department::find(2)->company->company_name;  //【一对一】、【多对一】 这种是正确的,别动了
            $usernames = Department::find(6)->user()
                        ->where('is_del','<>','1')
                        ->pluck('username');   //一对多关系
            $username_arr = [];
            foreach($usernames as $v){
                $username_arr[] = $v;   //输出纯一维数组
            }
            var_dump($usernames);
            echo "<br>";
            var_dump($username_arr);
  • 相关阅读:
    [转]IDEA 新建 JSP 项目时
    [转] AForge.NET 图像处理类
    [转] 端口被占用的处理
    [极客大挑战 2019]PHP
    今天鸽了
    [ZJCTF 2019]NiZhuanSiWei
    [极客大挑战 2019]Secret File
    [SUCTF 2019]Pythonginx
    [CISCN2019 华北赛区 Day1 Web2]ikun
    [极客大挑战 2019]EasySQL
  • 原文地址:https://www.cnblogs.com/xuzhengzong/p/8684469.html
Copyright © 2011-2022 走看看