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 ...
随机推荐
- 如何在没有https环境下使用webrtc
新版本的webrtc使用需要Https,但是在内网开发调试时,要配置Https环境比较麻烦,下面的方法是教你如何在http下使用webrtc 1,点桌面上的Chrome图票,右键->属性,把目票 ...
- JS获取当前屏幕宽高
Javascript: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.b ...
- Ubuntu重启网卡的三种方法
一.network利用root帐户# service network restart 或者/etc/init.d/networking restart 二.ifdown/ifup# ifdown et ...
- Exception in thread "main" java.nio.channels.NotYetConnectedException
import java.nio.channels.AsynchronousServerSocketChannel; import java.nio.channels.AsynchronousSocke ...
- C# 圆角button
因为自带的button是尖角的不太好看 这里在网上找的一份代码改改做个自用的button,画的操作不局限于button也可以画其他的 using System; using System.Collec ...
- bootstrap学习笔记(菜单.按钮)
下拉菜单 <div class="dropdown"> <button class="btn btn-default dropdown-toggle&q ...
- vue项目使用vue-i18n和iView切换多语言
效果图: 当然,如果使用iview组件,组件也会对应切换语言. 这里,假设已经用vue-cli脚手架创建了项目,熟悉vue-router,而且已经引入了iview UI. 第一步: 我们在main.j ...
- 匿名内部类中关于new Runnable()的使用
匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写. 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 1.继承一个父类的匿名内部类实现 ...
- java基础问题解答
Java学习中的问题 一 枚举类型: 下面是一段源程序代码: package Demo; public class Enum { public static void main(String[] ...
- c# 设计模式 之:工厂模式之---简单工厂
1.uml类图如下: 具体实现和依赖关系: 实现:SportCar.JeepCar.HatchbackCar 实现 Icar接口 依赖: Factory依赖 SportCar.JeepCar.Hatc ...