mysql - 借方余额 - 使用 eloquent 贷方
问题描述
我有一个带有事务的客户端数据库。每个事务有 2 个 sql 列,DEBIT 和 CREDIT。两个都可以填,也可以只填一个。
使用 eloquent,我想要的是借方的总和 - 贷方的总和,这样我就可以得到他的余额。
事务架构如下所示:
Schema::create('transactions', function (Blueprint $table) {
$table->increments('id');
$table->datetime('datestamp')->nullable();;
$table->text('reason')->nullable();;
$table->decimal('debit')->default(0);
$table->decimal('credit')->default(0);
$table->integer('customerId')->unsigned();
$table->foreign('customerId')->references('id')->on('customers');
$table->boolean('isDeleted')->default(0);
$table->timestamps();
});
我的客户模型如下所示:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class customer extends Model
{
public function transaction()
{
return $this->hasMany('App\Models\transaction','customerId','id')->where("isDeleted",0)->orderBy('datestamp');
}
}
我的交易模型如下所示:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class transaction extends Model
{
public function balance()
{
// problem is that i dont know how to get only for specific customer
$debit = transaction::sum('debit');
$credit = transaction::sum('credit');
return $debit-credit;
}
}
解决方案
您首先需要一个customer
对象,以便您可以通过您创建的关系引用他们的交易:
$customer = customer::find(1);
$transactions = $customer->transactions;
$balance = $transactions->sum(function($trans){
return $trans->debit - $trans->credit;
});
将其放置在customer
模型中很简单:
class customer extends Model
{
public function transaction()
{
return $this->hasMany('App\Models\transaction','customerId','id')->where("isDeleted",0)->orderBy('datestamp');
}
public function getBalanceAttribute(){
return $this->transactions->sum(function($trans){
return $trans->debit - $trans->credit;
});
}
}
现在您只需使用即可访问客户的余额$customer->balance
推荐阅读
- javascript - 防止有条件地选择输入值更改
- c - 如果重复使用,将面临 atoi 功能的问题
- javascript - 使用 Angular 5 routerLink 进行路由时,联系人组件中的主页滑块或谷歌地图未加载
- arrays - Bash 脚本:如果 VARIABLE 不是数组,${VARIABLE[number]} 是什么意思?
- matlab - 是否可以在 Matlab 的bayesopt 中保存检查点?
- vue.js - VueJS 在用户输入数据时禁用排序
- excel - Power Query - 从日期编号和时间列创建日期
- sql-server - SSRS 选择性分页符
- hadoop - 汇合:Hdfs 沉入 avro 格式,但在 hive 中读取 avro 文件时,我的时间比“时区”提前 5:30 小时:“亚洲/加尔各答”
- angular - 这是什么结构,我该如何使用它?