【问题标题】:I want to access the products with total amount我想访问总金额的产品
【发布时间】:2022-02-13 15:25:03
【问题描述】:

我有 2 张桌子。一种是产品(id,名称)。另一个是 In(id, amount, products_id)。 我正在尝试获取总金额的产品名称。 例子: Aerobat-34 战神3 Rs537-15

我加入了表格。现在输出是

[{"name":"Aerobat","amount":"10"},{"name":"Aerobat","amount":null},{"name":"Aerobat","amount":null},{"name":"Aerobat","amount":null},{"name":"Aerobat","amount":"2"},{"name":"Aerobat","amount":"56"},{"name":"Aerobat","amount":"56"},{"name":"god of war","amount":"7"},{"name":"god of war","amount":"23"},{"name":"Rs537","amount":null},{"name":"Rs537","amount":null},{"name":"Rs537","amount":null}]
public function index()
    {
        $product = DB::table('Products')
            ->join('ins', 'products.id', '=', 'ins.products_id')
            ->select('Products.name', 'ins.amount')
            ->get();
        echo $product;
    }

如何找到预期的结果?

【问题讨论】:

    标签: php laravel join eloquent-relationship


    【解决方案1】:

    你可以这样得到它

        public function index()
        {
            $product = DB::table('Products')
                ->join('ins', 'products.id', '=', 'ins.products_id')
                ->select('Products.name', 'ins.amount',DB::raw('sum(ins.amount) as total'))
                ->get();
            echo $product;
        }
    

    【讨论】:

      【解决方案2】:

      试试这个

      public function index()
      {
          $product = DB::table('products')
              ->join('ins', 'products.id', '=', 'ins.products_id')
              ->select('products.name', DB::raw('sum(ins.amount) as total_amount'))
              ->groupBy('ins.products_id')
              ->get();
      
          echo $product;
      }
      

      【讨论】:

        【解决方案3】:

        你应该使用模型关系 首先,在 Product 模型中创建一个名为 ins() 的函数

        public function ins()
        {
            return $this->hasMany('App\Models\Ins', 'product_id');
        }
        

        您还可以为产品声明一个虚拟列,执行该产品的总量。 请注意,您应该设置名称以“get”为前缀,“Attribute”为后缀

        public function getTotalAmountAttribute()
        {
            $totalAmount=0;
            foreach($this->ins as $item){
                 $totalAmount+=$item->amount??0
            }
            return $totalAmount;
        }
        

        最后,您可以同时使用名称和总金额等两个字段

        【讨论】:

          猜你喜欢
          • 2021-03-26
          • 1970-01-01
          • 1970-01-01
          • 2017-04-19
          • 2021-12-09
          • 2021-03-29
          • 2013-10-25
          • 1970-01-01
          • 2021-08-23
          相关资源
          最近更新 更多