文档章节

Laravel 事物模拟

void_ZZ
 void_ZZ
发布于 2017/03/28 19:05
字数 295
阅读 9
收藏 0

一个简单的事物模拟例子,用Laravel 实现

1、李四向张三打3000元,那么只有当李四账户钱减少成功且 张三确实受到钱的情况下执行事物

2、否则事物执行失败。

实现过程。

先创建一个表

php artisan make:migration create_pays_table

填写字段

Schema::create('pays', function(Blueprint $table) {
    $table->engine = 'InnoDB';
    $table->increments('id');
    $table->string('name');
    $table->decimal('pay');
    $table->string('type');
    $table->timestamps();
});

创建模型

php artisan make:model Pays
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Pays extends Model
{
    //
    protected $table = 'pays';
    protected $primaryKey = 'id';
    protected $fillable = ['name','id','type'];
}

创建数据

php artisan make:seeder PaysTable
<?php

use Illuminate\Database\Seeder;
use App\Pays;

class PaysTable extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
        Pays::truncate();
        Pays::create(
            [
                'name' => '张三',
                'pay' => '3000',
                'type' => 'RMB',
            ]
        );
        Pays::create(
            [
                'name' => '李四',
                'pay' => '10000',
                'type' => 'RMB',
            ]
        );
    }
}

生成数据

php artisan db:seed

创建控制器

php artisan make:controller Pay/PayPalController
<?php

namespace App\Http\Controllers\Pay;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Pays;
use \Illuminate\Support\Facades\DB;
class PayPalController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        DB::beginTransaction();
        try
        {
            $Result =   Pays::findOrFail('2');
            $Result_A = $Result->where('id','2')->update(
                [
                    'pay'=>'7000',
                ]
            );
            if($Result_A){
                $Result_B =   Pays::findOrFail('1');
                $Result_B =  $Result_B->where('id','1')->update(
                    [
                        'pay'=>'6000',
                    ]
                );
            }
            if($Result_A && $Result_B){
                DB::commit();
            }else{
                DB::rollBack();
            }
        } catch (\Exception $e)
        {
            DB::rollBack();

            throw $e;
        }
    }
}

 

 

 

© 著作权归作者所有

void_ZZ
粉丝 0
博文 31
码字总数 19923
作品 0
东城
私信 提问
Laravel 5.1 + OAuth2 PasswordGrant(密码授权模式)

背景简述 本文意在搭建一个通用的应用后端服务环境, 账号验证是应用的基础环境之一. OAuth2可提供安全的验证环境, 以accesstoken作为访问安全资源的令牌, 作为单一的应用端与后端的交互方式,...

黑狗007
2015/10/22
4.8K
9
Laravel 5.4 正式发布,PHP 开发框架

Laravel 5.4 正式发布了。有以下更新: Laravel Dusk 当编写接口测试时,Laravel 提供了一组有用的帮助方法,用来方便地单击链接,填充表单文件或提交表单。Laravel 使用 Symfony BrowserKit...

局长
2017/01/25
9.3K
34
Laravel 5.4 正式发布

![](https://dn-phphub.qbox.me/uploads/images/201701/25/1/dxcDfZsjA0.jpg?imageView2/1/w/1024/h/546) 以下是更新列表: ## Laravel Dusk 当编写接口测试时,Laravel 提供了一组有用的帮助......

summer_charlie
2017/01/26
3
0
使用 HTTP 测试测试 Laravel 中间件

文章转发自专业的Laravel开发者社区,原始链接:learnku.com/laravel/t/3… 在本文中,我将展示一个使用 HTTP 测试中间件的实例。HTTP 级测试更能适应变化,可读性更强。 在最近与 Adam Wat...

Summer__
09/18
0
0
使用桩件 (Stub) 解决 Laravel 单元测试中的依赖

本文是我在实践后的一点总结,难免有不妥之处。如有幸得大神路过,还望不吝赐教,小弟在此谢过了! 很早就知道有单元测试的概念,也曾尝试过,但是一直对单元测试的概念和方法,比较模糊。在...

daryl
09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
53分钟前
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
4
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部