inquid/laravel-stock

为Eloquent模型保持库存

资助包维护!
Patreon

2.0.0 2023-10-21 18:48 UTC

This package is auto-updated.

Last update: 2024-09-16 07:28:11 UTC


README

Latest Version on Packagist Total Downloads Software License

为Eloquent模型保持库存。此包将跟踪模型的库存变更。您可以增加、减少、清除和设置库存。还可以检查模型是否在库存中(在特定日期/时间)。

安装

您可以通过Composer安装此包

composer require inquid/laravel-stock

在您的项目中运行 php artisan vendor:publish --provider="Inquid\Stock\StockServiceProvider" 将发布此包的所有文件。运行 php artisan migrate 来迁移表。现在您的数据库中将有一个 stock_mutations 表。

配置文件看起来像这样

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default table name
    |--------------------------------------------------------------------------
    |
    | Table name to use to store mutations.
    |
    */
    
    'table' => 'stock_mutations',
    
    'stock_mutation_model' => Inquid\Stock\StockMutation::class,
    
    //'special_date_class' => \MongoDB\BSON\UTCDateTime::class,
];

使用方法

添加 HasStock 特性将在模型上启用库存功能。

注意:如果您需要使用自定义模型,例如MongoDB,您可以在配置文件 stock.php 中更新要使用的模型。

use Inquid\Stock\HasStock;

class Book extends Model
{
    use HasStock;
}

基本变更

$book->increaseStock(10);
$book->decreaseStock(10);
$book->mutateStock(10);
$book->mutateStock(-10);

支持仓库

$book->increaseStock(10, ['warehouse' => $warehouse_first]);
$book->decreaseStock(10, ['warehouse' => $warehouse_first]);
$book->mutateStock(10, ['warehouse' => $warehouse_first]);
$book->mutateStock(-10, ['warehouse' => $warehouse_first]);

清除库存

您也可以清除库存并直接设置新值。

$book->clearStock();
$book->clearStock(10);
// With warehouse
$book->clearStock(10, ['warehouse' => $warehouse_first]);

设置库存

您可以设置库存。这将创建一个新的变更,其中包含旧值和新值之间的差异。

$book->setStock(10);

检查模型是否在库存中

您还可以检查产品是否在库存中(带有最小值)。

$book->inStock();
$book->inStock(10);

带仓库

$book->inStock(); // anywhere
$book->inStock(10);
$book->inStock(10, ['warehouse' => $warehouse_first]);

当前库存

获取特定日期的当前库存值。

$book->stock;
$book->stock(Carbon::now()->subDays(10));

注意:如果您使用MongoDb,您需要在配置文件中设置日期类。'special_date_class' => \MongoDB\BSON\UTCDateTime::class,

特定仓库中的当前库存

获取特定仓库在特定日期的当前库存值。

$book->stock(null, ['warehouse' =>$warehouse_first]);
$book->stock(Carbon::now()->subDays(10), ['warehouse' =>$warehouse_first]);

在仓库之间移动

将源仓库的金额移动到目标仓库。

$book->moveBetweenStocks(5,$warehouse_first, $warehouse_second);

库存参数

为StockMutation添加描述和/或引用模型。

$book->increaseStock(10, [
    'description' => 'This is a description',
    'reference' => $otherModel,
]);

带仓库

$book->setStock(10, ['warehouse' => $warehouse_first]);

查询作用域

您还可以根据库存进行查询。

Book::whereInStock()->get();
Book::whereOutOfStock()->get();

测试

composer test

贡献

欢迎贡献,感谢大家 :)

关于Appstract(原始作者)

Appstract是一个来自荷兰的小团队。我们为Web开发者创建(开源)工具,并在Medium上撰写相关主题。您可以在Twitter上关注我们,为我们买杯啤酒或在Patreon上支持我们。

许可

MIT许可(MIT)。请参阅许可文件获取更多信息。