mysql - 借方余额 - 贷方使用 Eloquent

标签 mysql laravel 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::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

即可访问客户的余额

关于mysql - 借方余额 - 贷方使用 Eloquent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51211897/

相关文章:

php - MySQL一对多按连接表中的数字排序

mysql - 如何从 union all join 查询中删除重复项

mysql - 始终将设置的秒/分钟/小时舍入为 00 mysql

mysql - 单个 MySQL 查询求和日期和计数之间的结果

php - Laravel 6 错误 - Illuminate\Contracts\Container\BindingResolutionException 目标类不存在

php - 如何使用 laravel 在 MySQL 中通过将两个列值合并为一列来更新列

Laravel Eloquent With() With()

php - 如何使用 Laravel 的 Eloquent ORM 为(可能的)多态关系构建模型

Laravel 4.2 Eloquent 获取日期之间的帖子(事件)

php - 无法将 user_id 和 product_id 插入购物车。拉维尔 5