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 ...
随机推荐
- Cheatsheet: 2018 05.01 ~ 07.31
JAVA Java Tips: Creating a Monitoring-Friendly ExecutorService Other Modeling the Card Game War in C ...
- [javaSE] 网络编程(URLConnection)
获取URL对象,new出来,构造参数:String的路径 调用URL对象的openConnection()方法,获取URLConnection对象 调用URLConnection对象的getInput ...
- Java自定义cas操作
java Unsafe工具类提供了一个方法 public final native boolean compareAndSwapObject(Object var1, long var2, Objec ...
- HDU 2433 (最短路+BFS+剪枝)
http://acm.hdu.edu.cn/showproblem.php?pid=2433 这个问题因为路径都是1,所以可以用bfs遍历 可以看这几篇文章讲解: http://blog.csdn.n ...
- 文件上传(Servlet/Struts2/SpringMVC)
文件下载(Servlet/Struts2)的链接:http://www.cnblogs.com/ghq120/p/8328093.html 文件上传 Servlet实现 要实现文件上传的功能,必须在f ...
- UNIX 网络编程笔记-CH2:TCP、UDP概貌
好久不读不用又忘得差不多了,还是感叹Richard Stevens真是太刁,25年前第一版. "Tcp state diagram fixed new" by Scil100. L ...
- css文本内容显示省略号
文字显示省略号width: 4.5rem;overflow: hidden;white-space: nowrap;text-overflow: ellipsis; 但是这个属性只支持单行文本的溢出显 ...
- C++学习笔记(7)----类的数组中构造函数和析构函数的调用顺序
C++类的数组中构造函数和析构函数的调用顺序(2) 对于如下的代码: #include<iostream> using namespace std; class CBase { priva ...
- change grayscale to pseudo colouring using colormap in Matlab
change grayscale to pseudo colouring using colormap in Matlab In matlab you can view a grayscale ima ...
- unity震动效果
using System.Collections; using System.Collections.Generic; using UnityEngine; //思想:在短时间内在规定圆内随机震动对象 ...