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 ...
随机推荐
- 【12】FtpWebRequest上传下载
下载文件 /// <summary> /// 下载文件 /// </summary> /// <param name="filename">&l ...
- 内部类 ( Inner Class )
内部类的作用: 1.隐藏内部实现,高内聚. 2.Java多继承的实现. 何为Java的多继承? Java只支持单一继承,所以如果需要多继承,那么可用内部类来实现. 如何实现? 1.父类A public ...
- python中logging日志基本用法,和进程安全问题
低配版 import logging logging.debug('debug message') # 调试模式 logging.info('info message') # 正常运转模式 loggi ...
- [JSOI2008]最大数 线段树解法
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作 ...
- encodeURIComponent() 函数的使用
说明:encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 维护项目中,遇到一个登录的问题:(用户的loginName为33195221,密码为147258369+), ...
- Linux 重置root密码
1.首先输入:sudo passwd root(设置root密码) 2.输入当前系统的账户密码(账户:my的密码) 3.输入新的root密码,确认新 4.密码,密码更新成功 5.在提示符处输入:su按 ...
- path-to-regexp快速拆分 url 路径中的参数信息
介绍一个小工具 path-to-regexp 用于快速拆解url path中的部分,贴别适合restful接口中快速获取对应的实体参数 git地址可以参考 https://github.com/pil ...
- Raspberry Pi - Huawei HiLink E3256 3G modem to ethernet adapter
Raspberry Pi - Huawei HiLink E3256 3G modem to ethernet adapter This page documents how to configure ...
- Python库安装注意事项
由于一些python库依赖其它库或者其它组件,因此,在使用pip3命令安装python库的时候,经常会报错,告知缺失哪些组件. 但是, 开启VPN后,就没有再碰到类似错误,相关组件都是自动被安装. 因 ...
- GPU 编程语言 Harlan
Harlan 是一个声明式的.GPU 领域特定的编程语言.目前主要是用于技术实现和优化的测试用途.该语言很小,用于简化浏览新的分析器和优化. 支持的操作系统: Mac OS X 10.6 (Snow ...