1

我有两个表事务和事务分配。一个事务可以有多个分配。

交易模型

Schema::create('transactions', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
            $table->foreignId('contact_id')->constrained();
            $table->decimal('amount',19,4)->nullable();
        });

分配模型

Schema::create('transaction_allocations', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamp('created_at');
            $table->foreignId('transaction_id')->nullable()->constrained();
            $table->foreignId('bill_id')->nullable()->references('id')->on('bills');
            $table->decimal('amount',19,4)->nullable();
        });

交易模型中的关系

public function allocations(){
        return $this->hasMany(TransactionAllocation::class);
    }

我需要查询交易金额大于该交易所有分配金额总和的所有交易。(基本上是查找具有未分配余额的交易)。

Transaction::where('contact_id',$id)->where('amount','>',sum of allocations)->get();

我如何实现它?

我能够创建一个访问器来执行此计算并找到未分配的金额。但似乎访问器不能在哪里使用。我不想加载所有交易然后过滤它,因为它会太多。

我想直接查询并获取过滤后的行。我该怎么做?

4

1 回答 1

2

我认为拥有 Raw 更好地比较两列。

  Transaction::where('contact_id',$id)
              ->with('allocations')
              ->whereHas("allocations",function ($query){
                  $query->havingRaw('transactions.credit>sum(amount)');
                  $query->groupBy('transaction_id');
              })->orDoesntHave("allocations")
              ->get();

如果查询失败'strict' => false,则尝试 连接database.phpmysql

于 2021-06-19T13:08:48.793 回答