Laravel 雄辩的查询替代方案

Laravel 雄辩的查询替代方案,laravel,eloquent,Laravel,Eloquent,我怎样才能在拉威尔的雄辩中写出以下内容 SELECT * FROM ( SELECT real_estate.property_id, real_estate.amount_offered, payee.summa FROM real_estate LEFT JOIN (SELECT property_id, SUM(amount) AS summa FROM payments

我怎样才能在拉威尔的雄辩中写出以下内容

SELECT *
FROM
  ( SELECT real_estate.property_id,
           real_estate.amount_offered,
           payee.summa
   FROM real_estate
   LEFT JOIN
     (SELECT property_id,
             SUM(amount) AS summa
      FROM payments
      GROUP BY property_id) payee ON payee.property_id = real_estate.property_id ) yoot
WHERE summa = 0.05 * amount_offered
这件事已经有一段时间了,真的无法回避。让我解释一下引起恐慌的全部原因


我有两张桌子,一张是关于财产的,另一张是关于这些财产的付款。现在,在任何给定的时间,我都想询问哪些房产已经支付了一定的百分比,即0.05,代表5%。因为它是查询工作,但我需要一个雄辩的替代品。谢谢

在SQL中有子查询的任何地方,都需要使用DB::raw和Elounting。在本例中,FROM语句有一个很大的子查询,因此最简单的方法是:

DB::表 DB::raw'SELECT real_estate.property_id,real_estate.amount_offered,payee.summa FROM real_estate LEFT按payee.property_id=real_estate.property_id上的收款人从付款组中选择property_id,summa作为summa ->其中'summa',DB::raw'0.05*提供的金额'->get; 注意,我也使用DB::raw作为WHERE statment值。这是因为您正在使用列名进行乘法运算,否则该值将被引用为字符串

如果您想更进一步,使用Eloquent构建每个子查询,然后将其转换为SQL字符串并使用DB::raw注入它,您可以执行以下操作:

$joinQuery=DB::表“付款” ->选择'property_id','SUMamount AS summa' ->groupBy'property\u id' ->toSql; $tableQuery=DB::表'real\u estate' ->选择'real\u estate.property\u id','real\u estate.amount\u offered','paye.summa' ->leftJoinDB::raw$joinQuery,函数$join { $join->on'payee.property\u id'、'='、'real\u estate.property\u id'; } ->toSql; DB::tableDB::raw$表格查询。->其中'summa',DB::raw'0.05*提供的金额'->get;
在这种情况下,第二种方法与第一种方法相比没有任何好处,只是可能更具可读性。然而,当您需要将任何变量值绑定到查询(如条件)时,使用Eloquent构建子查询确实有其好处,因为查询将由Eloquent正确构建和转义,并且您不会倾向于SQL注入。

到目前为止您尝试过什么吗?发布一些代码来说明您解决此问题的尝试。尝试了从DB::tableDB::raw$qry和其他一些我将很快发布的查询,删除了它们,因为我没有得到任何有利的输出@Bogdan