首页 > 解决方案 > 我正在尝试在创建的每个账单中将产品价格保存在 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;
}

在此处输入图像描述

标签: laravellaravel-5

解决方案


您的Product模型与 有hasMany关系billProduct(),因此:

$data = Product::findOrFail($product['product_id']); // parent row
$data->billProduct()->create(['unit' => 1, 'price' => 123]); // product_id filled by eloquent

推荐阅读