Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询Laravel关系、产品、仓库和销售_Php_Laravel_Eloquent - Fatal编程技术网

Php 查询Laravel关系、产品、仓库和销售

Php 查询Laravel关系、产品、仓库和销售,php,laravel,eloquent,Php,Laravel,Eloquent,我使用Laravel管理不同仓库中的产品和销售,有四个表:产品、仓库、销售和销售项目,简化后如下所示: Storhouseid、地址 产品id、名称 销售标识、门店标识 销售项目标识、产品标识、销售标识、数量 问题是如何获得产品清单以及每个仓库中每个产品的销售额,有人知道如何做到这一点吗 以下是模型: class Product extends Model { public function sales(){ return $this->hasMany('App\Mo

我使用Laravel管理不同仓库中的产品和销售,有四个表:产品、仓库、销售和销售项目,简化后如下所示:

Storhouseid、地址

产品id、名称

销售标识、门店标识

销售项目标识、产品标识、销售标识、数量

问题是如何获得产品清单以及每个仓库中每个产品的销售额,有人知道如何做到这一点吗

以下是模型:

class Product extends Model 
{
    public function sales(){
      return $this->hasMany('App\Models\SaleItem');
    }
}

class Sale extends Model
{
  public function storehouse(){
    return $this->belongsTo('App\Models\Storehouse');
  }
  public function items(){
    return $this->hasMany('App\Models\Saleitem');
  }
}

class SaleItem extends Model
{
  public function sale(){
    return $this->belongsTo('App\Models\Sale');
  }
  public function product(){
    return $this->belongsTo('App\Models\Product');
  }
}

class Storehouse extends Model
{
  public function sales() {
    return $this->hasMany('App\Models\Sale');
  }
}

Eloquent对于管理和查询基本关系非常有用,但对于具有不同分组、聚合器等的复杂查询,使用它会变得更加困难。在这种情况下,我建议执行实际的sql查询:

SELECT P.id, P.name, SH.id, sum(SI.qty) as quantity
FROM products as P 
JOIN sale_items as SI on SI.product_id = P.id
JOIN sale as S on SI.sale = S.id
JOIN store_houses as SH on store_houses.id = S.store_id
GROUP BY P.id, SH.id
您可以在laravel中这样使用:

$result = DB::select('SELECT P.id, P.name, SH.id, sum(SI.qty) as quantity
FROM products as P 
JOIN sale_items as SI on SI.product_id = P.id
JOIN sale as S on SI.sale = S.id
JOIN store_houses as SH on store_houses.id = S.store_id
GROUP BY P.id, SH.id');

@gbalduzzi,感谢您提供的快速解决方案,您是wright,一个经典的sql查询是最好的选择,我已经解决了一些命名问题,现在可以正常工作,但是缺少产品信息,我认为结果不正确:/

$data = DB::select('SELECT P.id, P.name, SH.id, SH.name, sum(SI.qty) as sales
        FROM products as P 
        JOIN sale_items as SI on SI.product_id = P.id
        JOIN sales as S on SI.sale_id = S.id
        JOIN storehouses as SH on SH.id = S.storehouse_id
        GROUP BY P.id, SH.id');
还有其他问题,这里的id是

    [
      {
    "id": 1,
    "name": "Storehouse 01",
    "sales": "5.00"
  },
  {
    "id": 2,
    "name": "Storehouse 02",
    "sales": "8.00"
  },
  {
    "id": 1,
    "name": "Storehouse 01",
    "sales": "9.00"
  },
  {
    "id": 2,
    "name": "Storehouse 02",
    "sales": "6.00"
  },
  {
    "id": 1,
    "name": "Storehouse 01",
    "sales": "15.00"
  } ... ]

产品清单?这个列表是否需要属于某个特定的仓库?是的,一个产品列表,每个仓库都有销售数量或销售总额:/谢谢,我会尝试一下:)我在下面发布了您的代码的一个修改版本,它工作正常,但输出仍然不是很有用,请看一看。我对您的回答投了赞成票,我想出了如何使它适应我的需要。谢谢。结果中有两列名为id和两列名为
name
,因此它们会被覆盖。尝试
选择P.id作为产品id,P.name作为产品名称,SH.id作为仓库id,SH.name作为仓库名称,sum(SI.qty)作为销售