当前位置: 首页 > 知识库问答 >
问题:

和列的Laravel多重关系

元景天
2023-03-14

我有三种型号:发票、发票项和产品。

每个发票都与Invoiceitems模型有许多关系。

每个发票项目与产品模型有一个关系。

我需要计算产品类别为4的Invoiceitem产品金额的总和。

表结构

发票

id |日期|总金额|

发票项目

id|发票|product_id|product_amt|数量|total_amt

产品

ID|product_name|category_id

关系

发票模型

public function invoiceitems()
{

  return $this->hasMany('App\Invoiceitems', 'invoiceid', 'id');

}

发票项目模型

public function products()
{

  return $this->hasOne('App\Products', 'id', 'product_id');

}

预期报告

发票号|日期|蔬菜类产品金额|非蔬菜类产品金额|总金额

KL0001 | 15-05-2021 | 0.00 | 190.366 | 190.366

KL0002|16-05-2021|20.00|350.000|370.000

目前,我们使用以下帮助函数来获取特定类别产品的总金额

function getInvdiscsumamt($inv_id, $prdtype)
{

    $totaldisamt = Invoiceitems::Where('invoice_id', $inv_id)->whereHas('products', functhtml" target="_blank">ion ($query) use ($prdtype) {

        $query->where('category_id', $prdtype);

    })->sum('total_amt');

    return $totalpdtamt;
}

如何使用Elequoent方法显示特定类别的产品总量

共有1个答案

东门清夷
2023-03-14

您可以尝试Eloquent中已经存在的聚合函数之一,请参阅https://laravel.com/docs/8.x/eloquent-relationships#other-聚合函数,例如withSum

$invoiceItem = InvoiceItem::query()
    ->where('invoice_id', $invId)
    ->withSum(['products', function($query) use ($productType) {
        $query->where('category_id', $productType);
    }, 'frequency'])
    ->first();

然后,您的属性将使用属性{关系}_{函数}_{列}可用,因此在本例中products_sum_frequency

请注意,withSum不与with(或whereHas)函数共享任何内容,这意味着如果在查询中使用子选择,如-

我还建议在您的功能和型号中使用适当的外壳。我也会对所有模型类名使用单数名称。因此,Invoiceitems将成为InvoiceItemmodels/InvoiceItem.php)。据我所知,这是在laravel中定义它的默认方式。

 类似资料:
  • 这是项目迁移 这是时间表 这样用户就可以迁移了 这是我的项目模型 这是我的时间表模型: 这是我的用户模型 现在,我从项目返回我的查询 这是可以的,但user_id用户在timesheets.user_id我不能得到它的时间表,并得到它 此控制器按时间表中的项目id返回项目和时间表,但时间表中的用户id我不知道如何将其输入系统

  • 我试图编写一个查询,它从模型中选择列,然后从关系表中选择一列。 如何从此查询中的关系表中获取列?

  • 问题内容: 在两列上可能有hasMany关系吗? 我的表格有两列,和。 我希望我的关系匹配任一列。 在我的模型中 运行查询:。 我需要运行的查询是: 编辑: 我正在使用急切加载,我认为这将影响它的工作方式。 问题答案: 我认为不可能完全按照您的要求去做。 我认为您应该将它们视为独立的关系,然后在模型上创建一个新方法来检索两者的集合。 这样,您仍然可以获得在模型上进行预先加载和关系缓存的好处。

  • 我在一个laravel控制器中运行以下代码, 但是我似乎从服务器上得到了以下错误, {“error”:{“type”:“ErrorException”,“message”:“preg_replace():参数不匹配,模式为字符串,而替换为数组”,“file”:“/Users/S/Sites/app api/vendor/laravel/framework/src/illumb/Support/he

  • 我有3个标签:用户、教师和帖子。 用户: id-integer name-string 教师: id-integer 教师id-integer 用户id-integer 姓名-string 帖子: id-integer user\u id-integer title-string 用户模型: 教师模式: ??问题是我如何使用这样的东西:

  • 我在Books表和Authors表之间有多对多的关系。透视表(author_book)包含author_id和book_id。