laravel 多态关联

3 篇文章 0 订阅
-comment 表
	-id
	-type // 类型 1:article, 2:news, 3:xx
	-model // type对应的orm model, 如果写获取器可以直接在获取器中写 type对应的关系 例如: Article::class
	-relation_id 关联id

-article 表
	-id
	-content
-news 表
	-id
	-content
	
  • Comment model 代码
	// 获取器 但我在使用with的时候获取不生效, 所以在comment表中加了model
    public function getTypeAttribute($value)
    {
        $map = [
            1 => Article::class,
            2 => News::class,
        ];
        $type =  $map[$value] ?? '';
        return $this->attributes['type'] = $type;
    }
	// 获取拥有此评论的模型
	public function commentable()
    {
    	// 参数: 关联关系名称, 
    	// 关联模型的字段model(type和model字段正常一个就可以, 使用获取器或者model), 
    	// 关联字段, 
    	// 获取拥有此评论的模型id
        return $this->morphTo('commentable', 'model', 'relation_id', 'id');
    }

  • Article model 代码, news 代码同理
    public function commentable()
    {
    	// 一对多 morphMany, 一对一 morphOne
        return $this->morphMany(Comment::class, 'commentable', 'model', 'relation_id', 'id');
    }
  • 使用
	// 会根据关联关系去对应的表中获取数据
	Comment::with('commentable')->get();
	// 获取指定字段
	Comment::with('commentable:id,name')->get();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值