迁移:

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 多态映射(打赏为例)的更多相关文章

  1. laravel 字段映射问题,表单中提交字段与数据表中字段不一致

    在遇到提交表单时,表单中的name属性与数据表中的字段不一致,报错, 解决方法: 参考1:提交表单的时候,表单的name属性和数据表字段名称是一样的,这样有什么不妥么? 你数据库的信息给前端透露得越多 ...

  2. Laravel 多态关联中利用关联表相关字段进行排序的问题

    1 目标 1.1 在 Laravel 项目的开发中,多态的需求很常见,按多态关联进行排序的需求也是必须的. 1.2 请想像,我们有一个需求,荣誉栏目多态关联一个档案模型,要求在荣誉中按档案的推荐时间进 ...

  3. mac 下直接给docker容器加映射 mysql 为例

    如果你是下面这种情况,本文可能回给你一些帮助 os是Mac,docker中已有mysql容器,并且已经有数据,但是没有设置映射,想要从主机连接docker 中的mysql,以便更好的查看,增加,删除数 ...

  4. linux主机下的Vmware Workstation配置NAT设置 端口映射-Ubuntu为例

    最近折腾虚拟机,由于是在linux下进行的,而相关资料比较少,所以遇到了一些问题. 一个就是配置vmware workstation的NAT设置.因为一般来说,NAT可以共享主机的ip,从而能以主机身 ...

  5. Laravel 多态关联使用的案例

    1.实现的功能,:短信发送,需要签名和模板审核,审核结果要插进审核记录表 2,在signature(签名表模型)和 template(模板表模型)添加多态对应关系代码其实一样,代码如下: 审核记录表需 ...

  6. xml 文件不给提示(以mybatis 的 mapper映射文件为例)

    在xxx.xml 映射文件的头部可以看到 如下: (mybatis generate 自动生成) <!DOCTYPE mapper PUBLIC "-//mybatis.org//DT ...

  7. Laravel 多态关联中不能使用 has, whereHas

    ghost commented on Apr 13, 2017 • edited by ghost  i'm currently using this code in my own project m ...

  8. laravel orm

    ###多对多关系 多对多关系和之前的关系完全不一样,因为多对多关系可能出现很多冗余数据,用之前自带的表存不下了. 我们定义两个模型:Article 和 Tag,分别表示文章和标签,他们是多对多的关系. ...

  9. Laravel 学习笔记之 Composer 自动加载

    说明:本文主要以Laravel的容器类Container为例做简单说明Composer的自动加载机制. Composer的自动加载机制 1.初始化一个composer项目 在一个空目录下compose ...

随机推荐

  1. 类库里面添加日志记录 log4net

    第一步: 新建一个公共类库common,添加CustomLog4jLogger.cs 并引用log4net.dll /// <summary> /// 日志记录 /// </summ ...

  2. 怎么使用fiddler 测试post get 接口

    直接上图 测试 post

  3. java自学-编程入门

    java语言写的代码需要先编译为可执行文件,才能被jvm执行.在下载的jdk安装目录下的bin目录,有两个可执行程序java.exe和javac.exe,javac就是用来编译的,java是执行编译后 ...

  4. 【SSH网上商城项目实战25】使用java email给用户发送邮件

       转自: https://blog.csdn.net/eson_15/article/details/51475046 当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息, ...

  5. 【SSH网上商城项目实战21】从Demo中看易宝支付的流程

         转自: https://blog.csdn.net/eson_15/article/details/51447492 这一节我们先写一个简单点的Demo来测试易宝支付的流程,熟悉这个流程后, ...

  6. 最小生成树(prim)

    里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且 ...

  7. html和css入门 (二)

    CSS基础 什么是CSS 简单来说,层叠样式表(Cascading Style Sheet)是一种专门用来控制界面外观风格的文档. CSS发展历史 1996年 CSS 1.0 规范面世,其中加入了字体 ...

  8. css权威指南读书笔记-第10章浮动和定位

    这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...

  9. JavaScript : Array assignment creates reference not copy

    JavaScript : Array assignment creates reference not copy 29 May 2015 Consider we have an array var a ...

  10. Linux(Ubuntu16.04)下添加新用户

    某些情况下,Ubuntu 使用useradd 新用户名,在home 文件夹下面看不到新创建的用户文件夹,例如: 发现找不到,spark的文件夹,因此将采用下面方式重新建立首先删除spark用户 若想给 ...