laravel 多态映射(打赏为例)
迁移:
public function up()
{
Schema::create('rewards', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned()->comment('操作用户');
$table->integer('target_user')->unsigned()->comment('目标用户');
$table->bigInteger('amount')->unsigned()->comment('打赏金额');
$table->morphs('rewardable');
$table->timestamps();
});
}
表结构:

模型:
<?php declare(strict_types=1); namespace Zhiyi\Plus\Models; use Illuminate\Database\Eloquent\Model; class Reward extends Model
{
/**
* The guarded attributes on the model.
*
* @var array
*/
protected $guarded = ['id', 'created_at', 'updated_at'];
/**
* Has rewardable.
*
* @return \Illuminate\Database\Eloquent\Relations\MorphTo
* @author Seven Du <shiweidu@outlook.com>
*/
public function rewardable()
{
return $this->morphTo();
}
/**
* Has user for the rewardable.
*
* @author bs<414606094@qq.com>
* @return \Illuminate\Database\Eloquent\Relations\HasOne|null
*/
public function user()
{
return $this->hasOne(User::class, 'id', 'user_id');
}
/**
* Has target for the rewardable.
*
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function target()
{
return $this->hasOne(User::class, 'id', 'target_user');
}
}
动态打赏:

资讯打赏:

用户打赏记录:

<?php declare(strict_types=1); namespace Zhiyi\Plus\Models\Relations; use Zhiyi\Plus\Models\User;
use Zhiyi\Plus\Models\Reward; trait UserHasReward
{
/**
* 用户的被打赏记录.
*
* @author bs<414606094@qq.com>
* @return \Illuminate\Database\Eloquent\Relations\morphMany
*/
public function beRewardeds()
{
return $this->morphMany(Reward::class, 'rewardable');
} /**
* 打赏用户.
*
* @author bs<414606094@qq.com>
* @param mix $user
* @param float $amount
* @return mix
*/
public function reward($user, $amount)
{
if ($user instanceof User) {
$user = $user->id;
} return $this->getConnection()->transaction(function () use ($user, $amount) {
return $this->beRewardeds()->create([
'user_id' => $user,
'target_user' => $this->id,
'amount' => $amount,
]);
});
}
帖子打赏:

laravel 多态映射(打赏为例)的更多相关文章
- laravel 字段映射问题,表单中提交字段与数据表中字段不一致
		在遇到提交表单时,表单中的name属性与数据表中的字段不一致,报错, 解决方法: 参考1:提交表单的时候,表单的name属性和数据表字段名称是一样的,这样有什么不妥么? 你数据库的信息给前端透露得越多 ... 
- Laravel 多态关联中利用关联表相关字段进行排序的问题
		1 目标 1.1 在 Laravel 项目的开发中,多态的需求很常见,按多态关联进行排序的需求也是必须的. 1.2 请想像,我们有一个需求,荣誉栏目多态关联一个档案模型,要求在荣誉中按档案的推荐时间进 ... 
- mac 下直接给docker容器加映射 mysql 为例
		如果你是下面这种情况,本文可能回给你一些帮助 os是Mac,docker中已有mysql容器,并且已经有数据,但是没有设置映射,想要从主机连接docker 中的mysql,以便更好的查看,增加,删除数 ... 
- linux主机下的Vmware Workstation配置NAT设置 端口映射-Ubuntu为例
		最近折腾虚拟机,由于是在linux下进行的,而相关资料比较少,所以遇到了一些问题. 一个就是配置vmware workstation的NAT设置.因为一般来说,NAT可以共享主机的ip,从而能以主机身 ... 
- Laravel 多态关联使用的案例
		1.实现的功能,:短信发送,需要签名和模板审核,审核结果要插进审核记录表 2,在signature(签名表模型)和 template(模板表模型)添加多态对应关系代码其实一样,代码如下: 审核记录表需 ... 
- xml 文件不给提示(以mybatis 的 mapper映射文件为例)
		在xxx.xml 映射文件的头部可以看到 如下: (mybatis generate 自动生成) <!DOCTYPE mapper PUBLIC "-//mybatis.org//DT ... 
- Laravel 多态关联中不能使用 has, whereHas
		ghost commented on Apr 13, 2017 • edited by ghost i'm currently using this code in my own project m ... 
- laravel orm
		###多对多关系 多对多关系和之前的关系完全不一样,因为多对多关系可能出现很多冗余数据,用之前自带的表存不下了. 我们定义两个模型:Article 和 Tag,分别表示文章和标签,他们是多对多的关系. ... 
- Laravel 学习笔记之 Composer 自动加载
		说明:本文主要以Laravel的容器类Container为例做简单说明Composer的自动加载机制. Composer的自动加载机制 1.初始化一个composer项目 在一个空目录下compose ... 
随机推荐
- vscode下eslint代码规范
			直接上规范吧: // 将设置放入此文件中以覆盖默认设置 { "editor.fontSize": 17, "editor.tabSize": 2, " ... 
- [javaSE] 集合框架(迭代器)
			当我们创建一个集合以后,可以直接使用system.out.println()来打印这个集合,但是,我们需要可以对每个元素进行操作,所以,这里需要使用迭代器来遍历集合 迭代器其实就是集合取出元素的方式 ... 
- 【SSH网上商城项目实战18】过滤器实现购物登录功能的判断
			转自:https://blog.csdn.net/eson_15/article/details/51425010 上一节我们做完了购物车的基本操作,但是有个问题是:当用户点击结算时,我们应该做一个登 ... 
- python中静态方法(@staticmethod)和类方法(@classmethod)的区别
			一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法. 而使用@staticmethod或@classmethod,就可以不需要实例化,直接类名.方法名()来调用. 这有利于组织代码,把某些应 ... 
- BZOJ1031 [JSOI2007]字符加密
			Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作 ... 
- mustache 模板,用于构造html页面内容
			Mustache 的模板语法很简单,就那么几个: {{data}} {{#data}} {{/data}} {{^data}} {{/data}} {{.}} {{<partials}} {{{ ... 
- 如何用kindle看论文
			kindle的pdf显示效果向来不好,那么如何把pdf转换成mobi格式呢 可以把个人文件(pdf)发送至您的[发送至Kindle]电子邮箱时,在电子邮件的主题栏中填写"convert&qu ... 
- mysql中int、bigint、smallint 和 tinyint的区别与长度的含义【转】
			最近使用mysql数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint.其中比较迷惑的是int和smallint的差别.今天就在网上仔细找了找,找到如下内容, ... 
- linux整个日志目录查询记录
			在linux下面需要查看整个目录的日志,搜索用户的一个行为.因为不知道具体是那一天,一个个的查询也可以,但是太麻烦.可以用过下面的命令来实现: rep -iRl "关键字" ./ ... 
- HTML 的 style 属性
			style 属性用于改变 HTML 元素的样式. This text is in Verdana and red This text is in Times and blue This text is ... 
