我想使用查询构建器获取此查询:
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');
});
答案 0 :(得分:1)
你能直接添加你需要的输出吗?就像你打算在你的视野中抛出什么,所以我可以给你雄辩的设置。从上面的迁移看起来你似乎缺少一些像“库存”这样的表。
无论如何 - 首先需要在模型之间建立雄辩的关系。对于上面两个,这样的事情:
DeterminePostPieceIsVisited
和
class Stock extends Model{
public function product(){
return $this->belongsTo(Product::class);
}
}
现在,你的总和让我感到困惑...因为vendor_quantity是你的股票表中的一列......你需要从股票表中获得所有产品和相应的外键值然后求和vendor_quantity中的所有值?如果是这样的话,可以这样做:
class Product extends Model{
public function stock(){
return $this->hasMany(Stock::class);
}
}
这将返回包含库存表中所有产品和外键值的雄辩集合。由于您具有相关表中的值,因此您可以遍历每个值并将其添加到变量中,或者只是将其附加到初始对象以传递到视图。例如
$products = Products::with('stock')->get();
现在,当您将$ products传递到视图时,您可以轻松地在视图中获得总和:
$products = Product::with('stock')->get();
foreach ($products as $key => $product){
$vendorQuantitySum = $product->stock->sum('vendor_quantity');
$products[$key]->vendorQuantity = $vendorQuantitySum;
}
我刚刚在我的Laravel安装上测试它,它似乎工作:)