Оставшийся остаток по дебету - использование кредита eloquent - PullRequest
0 голосов
/ 06 июля 2018

У меня есть клиентская база данных с транзакциями. Каждая транзакция имеет 2 столбца sql, дебет и кредит. Оба могут быть заполнены или только один.

Используя 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; 
    }
}

1 Ответ

0 голосов
/ 06 июля 2018

Сначала вам нужен объект 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...