laravel - 我正在尝试在创建的每个账单中将产品价格保存在 billProduct 表中
问题描述
创建 Bill 时,如何从 Product 表中获取价格列和成本价格并将其保存到 BillProducts 表?
这是 BillProducts 模型,每次创建账单时我都需要在其中插入价格和成本价
class BillProduct extends Model {
protected $fillable = [
'bill_id', 'product_id', 'quantity', 'unit', 'packing', 'remark', 'discount','price','cost_price'
];
protected $appends = ['price','profit'];
public function product() {
return $this->belongsTo(Product::class)->withDefault();
}
}
另外,我有一个产品表,其中存储了所有产品信息:
class Product extends Model {
use Translatable;
public $translatedAttributes = ['description', 'title'];
public $translationModel = ProductTranslation::class;
const FILLABLE = ['price', 'quantity', 'cost_price', 'supplier_id','item_code'];
protected $fillable = self::FILLABLE;
public function createTranslation(Request $request) {
foreach (locales() as $key => $language) {
foreach ($this->translatedAttributes as $attribute) {
$this->{$attribute . ':' . $key} = $request->get($attribute . '_' . $key);
}
$this->save();
}
return $this;
}
public function billProduct() {
return $this->hasMany(BillProduct::class);
}
}
现在每次我在创建账单时选择产品时,我都需要在 billProducts 表中保存产品价格
我需要这样做以避免在更新任何产品时更改账单总额
另外,我在模型中使用此功能在 billProducts 中创建产品
public function createProducts(Request $request)
{
foreach ($this->billProducts ?? [] as $billProduct) {
$billProduct->product->updateQuantity($billProduct->quantity);
$billProduct->delete();
}
$dataArr = [
'status' => true,
'item' => $this
];
foreach ($request->products ?? [] as $product) {
$productObj = Product::findOrFail($product['product_id']);
if ($productObj->updateQuantity(-1 * $product['quantity'])) {
$product['bill_id'] = $this->id;
BillProduct::create($product);
} else {
$dataArr['status'] = false;
}
}
$this->save();
return $dataArr;
}
解决方案
您的Product
模型与 有hasMany
关系billProduct()
,因此:
$data = Product::findOrFail($product['product_id']); // parent row
$data->billProduct()->create(['unit' => 1, 'price' => 123]); // product_id filled by eloquent
推荐阅读
- windows - 适用于 Linux 的 Windows 子系统的 cmd.exe 的替代品
- java - 当我在 libGDX 中更改分辨率时如何保持平铺地图的外观
- android - 如何禁用 OneSignal 通知弹出窗口?
- java - Spring-mvc 中的 JDBC 异常处理
- r - 数据帧作为 R 中 3D 矩阵中的第三维
- npm - npm - 通过多个脚本从 CLI 传递参数
- angular - PhantomJS/Chrome 在 Angular 6 项目中因“Zone\nat”/“脚本错误”而在 Karma 测试中失败
- wordpress - 仅在“pre_get_posts”钩子中查询带有特色图片的帖子
- api - 可以使用 Envoy Proxy 封装第三方 API 吗?
- vba - 将 Outlook 电子邮件另存为“.msg”而不是“文件”