2021-07-05

Posted @Kerry~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-07-05相关的知识,希望对你有一定的参考价值。

多态关键:就是设置多态类型字段 前缀_type、多态关联字段 前缀_id

多态一对一 
案例:用户有一个头像、团队也是有一个头像,那么一般都是存在一个头表里面 (根据多态类型 和 多态关联字段 来查询) 
member
 id - integer
 name - string

team
 id - integer
 name - string

avatar
 id - integer
 avatar - string
 imageable_id - integer
 imageable_type - string

morphOne方法的参数如下 
morphOne('关联模型','多态字段','多态类型');

多态字段:多态前缀_id/ 多态前缀_type 一般都是填写前缀

多态类型:指定当前的模型名称(一般建议填写)

Member模型
class Member extends Model 
{ 
// 头像
    public function avatar() { 
        return $this->morphOne(Avatar::class,'imageable','Member'); 
    } 
}

team模型 
class Team extends Model 
{ 
    // 头像 
    public function avatar() {
         return $this->morphOne(Avatar::class,'Team'); 
    } 
} 

Avatar 头像模型 imageable是多态字段的前缀 一般用于多态方法名称 
class Avatar extends Model 
{
     // 多态关联方法 
    public function imageable() {
         return $this->morphTo(); 
    } 
}

Member数据表

Team数据表

Avatar头像表

多态一对多
 案例:书本和文章都有评论、那么评论是存在一张表里面。
       根据多态字段、多态类型关联 (根据多态类型 和 多态关联字段 来查询) 
文章表 
article
 id - integer
 title - string
 content - text 

书本表
book
 id - integer
 title - string 

评论表 
comment
 id - integer
 content - text
 commentable_id - integer
 commentable_type - string

morphMany('关联模型','多态字段','多态类型');

 关联模型(必须):关联的模型名称,可以使用模型名(如Comment)或者完整的命名空间模型名(如app\\index\\model\\Comment)。

 多态字段(可选):支持两种方式定义 如果是字符串表示多态字段的前缀,多态字段使用 多态前缀_type和多态前缀_id, 如果是数组,表示使用['多态类型字段名','多态ID字段名'],默认为当前的关联方法名作为字段前缀。

 多态类型(可选):当前模型对应的多态类型,默认为当前模型名,可以使用模型名(如Article)或者完整的命名空间模型名(如app\\index\\model\\Article)。 

文章模型 class Article extends Model { 
    // 获取文章评论 
    public function comments() { 
        return $this->morphMany(Comment::class, 'commentable','Article'); 
    } 
} 

书本模型 
class Book extends Model { 
// 获取评论 
    public function comments() { 
        return $this->morphMany(Comment::class, 'commentable','Book');
     } 
} 

morphTo('多态字段',['多态类型别名']);
 多态字段(可选):支持两种方式定义 如果是字符串表示多态字段的前缀,多态字段使用  多态前缀_type和多态前缀_id,如果是数组,表示使用['多态类型字段名','多态ID字段名'],默认为当前的关联方法名作为字段前缀

多态类型别名(可选):数组方式定义 

评论模型 
class Comment extends Model { 
/** * 获取评论对应的多态模型。 */ 
    public function commentable() { 
        return $this->morphTo(); 
    } 
}

Article 文章表

Book 书本表

Comment 评论表

以上是关于2021-07-05的主要内容,如果未能解决你的问题,请参考以下文章

2021-07-05

2021-07-05

Android 随心笔记(更新至2021.07.05)

老司机 iOS 周报 #165 | 2021-07-05

2021-07-05 .NET高级班 93-CentOS7安装nginx及nginx配置

Note on python__2021-07-05Python练习使用字典dict+list