[英]How to select data from a sub query using laravel query builder
[英]Laravel Sub queries in select using query builder
我想使用查询生成器获取此查询:
SELECT *,
( SELECT sum(vendor_quantity)
from inventory
WHERE product_id = products.id
) as qty from products
我坚持这部分
(SELECT sum(vendor_quantity) from inventory where product_id = products.id)
我可以使用原始查询来执行此操作,但是我想知道是否可以在查询生成器中执行此操作。
我的产品表架构:
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('product_type',50);
$table->string('product_name',255);
$table->string('internal_reference',255);
$table->string('barcode',255);
$table->decimal('sale_price', 10, 2);
$table->decimal('cost', 10, 2);
$table->decimal('weight', 10, 2);
$table->decimal('volume', 10, 2);
$table->integer('added_by')->unsigned();
$table->timestamps();
});
// Foreign Keys
Schema::table('products', function(Blueprint $table) {
$table->foreign('added_by')->references('id')->on('users');
});
库存表:
Schema::create('stocks', function (Blueprint $table) {
$table->increments('id');
$table->integer('product_id')->unsigned();
$table->integer('vendor')->unsigned();
$table->string('vendor_product_code',255);
$table->string('vendor_product_name',255);
$table->integer('vendor_quantity');
$table->decimal('vendor_price', 10, 2);
$table->date('vendor_produce');
$table->date('vendor_expiry');
$table->integer('added_by')->unsigned();
$table->timestamps();
});
// Foreign Keys
Schema::table('stocks', function(Blueprint $table) {
$table->foreign('product_id')->references('id')->on('products');
$table->foreign('vendor')->references('id')->on('customers');
$table->foreign('added_by')->references('id')->on('users');
});
您可以只添加所需的输出内容吗? 就像您打算提出的建议一样,我可以为您提供出色的设置。 从上面的迁移看来,您似乎缺少了一些表格,例如“库存”。
以任何方式-您首先需要在模型之间建立雄辩的关系。 对于上面的两个,是这样的:
class Stock extends Model{
public function product(){
return $this->belongsTo(Product::class);
}
}
和
class Product extends Model{
public function stock(){
return $this->hasMany(Stock::class);
}
}
现在,您的总和让我有些困惑...由于vendor_quantity是您的库存表中的一列...您是否需要从库存表中获取所有产品和相应的外键值,然后将所有值求和在vendor_quantity中? 如果是这种情况,请执行以下操作:
$products = Products::with('stock')->get();
这将从库存表中返回您所有产品和外键值的雄辩的集合。 由于您具有相关表中的值,因此您可以遍历每个表中的值,将其添加到变量中,或仅将其附加到初始对象以传递到视图。 例如
$products = Product::with('stock')->get();
foreach ($products as $key => $product){
$vendorQuantitySum = $product->stock->sum('vendor_quantity');
$products[$key]->vendorQuantity = $vendorQuantitySum;
}
现在,当您将$ products传递到视图时,您可以轻松地在视图中获得总和,如下所示:
{{ $product->vendorQuantity }}
我刚刚在Laravel安装上对其进行了测试,它似乎可以正常工作:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.