【问题标题】:How to fetch record with secondary key in laravel如何在laravel中使用辅助键获取记录
【发布时间】:2020-04-16 07:07:39
【问题描述】:

我已经搜索了解决方案,但找不到任何完美解决此问题的方法。 我有两个模型,如下所示

class Payments extends Model
{
    protected $table = 'payments';

    public function investment_()
    {
        return $this->belongsTo('App\Investments', 'investment_id', 'id');
    }

}

class Investments extends Model
{
    protected $table = 'investments';

    public function payments_()
    {
        return $this->hasMany('App\Payments', 'investment_id', 'id');
    }
}

付款有一个金额列,而投资也有一个金额列。

如何仅在特定投资的总付款至少是投资金额的一半的情况下提取所有付款?

我不知道如何构造查询,以便付款可以选择相应的投资值并检查条件。

这就是我目前在我的控制器中所拥有的 $payments = Payments::where('amount', '>=', Investment::where('id', Payments::where(?)))->get();

注意:我不知道在问号中填什么,也不知道我的方法是否正确。

这是一个错误查询示例,可以更好地说明这一点

SELECT a.SUM(a.amount) AS amount FROM payments as a, investments as b where a.investment_id = b.id and a.sum(a.amount)*2 = b.amount GROUP BY a.investment_id;

【问题讨论】:

  • 使用 eloquent 你不能不接触 PHP,而使用查询生成器你可以在数据库端完成所有操作

标签: php sql laravel eloquent


【解决方案1】:

查询只是

SELECT a.SUM(a.amount) AS amount 
FROM payments as a JOIN investments as b 
     ON a.investment_id = b.id 
GROUP BY a.investment_id
HAVING SUM(a.amount)*2 < b.amount;

你可以在 Laravel Query builder 元素中轻松翻译,但如果你只是需要这个,你可以使用 DB::select('query') 来获取它们

【讨论】:

    【解决方案2】:

    希望这能解决您的问题。请检查。谢谢

    \App\Payment::where(function ($query) {
                $query->whereRaw('(select SUM(payment_amount) from payments as payments_final where investment_id = payments.investment_id) >= (select investment_amount/2 from investments where id=payments.investment_id)');
            })
            ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 2015-10-08
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      相关资源
      最近更新 更多