- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作库存管理系统。当产品缺货时,我会在表格中输入一个条目,并在“oos_at”字段中注明日期/时间。
稍后,当它重新有货时,我找到该条目并更新“restocked_at”时间戳字段。
但是,当我执行第二个操作时,我的“oos_at”字段被查询 ('updated_at') 字段的时间戳覆盖...我必须在另一个实体上跟踪这个“oos_at”字段,这样它就不会被覆盖,然后在更新该表时使用该字段第二次更新“oos_at”字段...
下面是我的代码....
class Pusher extends Model {
/**
*
*
* @param Carbon $oos_at
* @return bool
*/
public function setAsOutOfStock(Carbon $oos_at)
{
Log::info([
'FILE' => get_class($this),
'method' => 'setAsOutOfStock',
'pusher' => $this->id,
'param:oos_at' => $oos_at->toDateTimeString(),
]);
$this->pusherOutOfStocks()->create([
'location_id' => $this->location_id,
'product_id' => $this->product_id,
'oos_at' => $oos_at->toDateTimeString(),
]);
$this->oos = true;
$this->oos_at = $oos_at;
return $this->save();
}
/**
* Clear the PusherOutOfStocks attached to $this Pusher
* (This Pusher has been restocked!)
*
* @param Carbon $time
* @return bool
*/
public function setAsInStock(Carbon $time)
{
Log::info([
'FILE' => get_class($this),
'method' => 'setAsInStock',
'pusher' => $this->id,
'param:time' => $time->toDateTimeString(),
]);
$this->pusherOutOfStocks()->where('restocked_at', null)
->update(['restocked_at' => $time->toDateTimeString()]);
$this->oos = false;
$this->oos_at = null;
return $this->save();
}
}
当我在推送器重新进货之前死掉并转储 PusherOutOfStocks 时,“oos_at”被适本地设置。
Illuminate\Database\Eloquent\Collection {#340
#items: array:1 [
0 => Newave\Engineering\PusherOutOfStock {#343
#fillable: array:5 [
0 => "pusher_id"
1 => "location_id"
2 => "product_id"
3 => "oos_at"
4 => "restocked_at"
]
#dates: array:2 [
0 => "oos_at"
1 => "restocked_at"
]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:9 [
"id" => 246
"pusher_id" => 216
"location_id" => 634
"product_id" => 378
"oos_at" => "2016-03-11 03:00:00"
"restocked_at" => null
"created_at" => "2016-03-11 12:12:01"
"updated_at" => "2016-03-11 12:12:01"
"deleted_at" => null
]
#original: array:9 [
"id" => 246
"pusher_id" => 216
"location_id" => 634
"product_id" => 378
"oos_at" => "2016-03-11 03:00:00"
"restocked_at" => null
"created_at" => "2016-03-11 12:12:01"
"updated_at" => "2016-03-11 12:12:01"
"deleted_at" => null
]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [
0 => "*"
]
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
+wasRecentlyCreated: false
#forceDeleting: false
}
]
}
当我在推送器重新进货后死亡并转储 PusherOutOfStocks 时,“oos_at”与“updated_at”相同
Illuminate\Database\Eloquent\Collection {#408
#items: array:1 [
0 => Newave\Engineering\PusherOutOfStock {#775
#fillable: array:5 [
0 => "pusher_id"
1 => "location_id"
2 => "product_id"
3 => "oos_at"
4 => "restocked_at"
]
#dates: array:2 [
0 => "oos_at"
1 => "restocked_at"
]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:9 [
"id" => 244
"pusher_id" => 214
"location_id" => 626
"product_id" => 374
"oos_at" => "2016-03-11 12:10:23"
"restocked_at" => "2016-03-11 04:00:00"
"created_at" => "2016-03-11 12:10:22"
"updated_at" => "2016-03-11 12:10:23"
"deleted_at" => null
]
#original: array:9 [
"id" => 244
"pusher_id" => 214
"location_id" => 626
"product_id" => 374
"oos_at" => "2016-03-11 12:10:23"
"restocked_at" => "2016-03-11 04:00:00"
"created_at" => "2016-03-11 12:10:22"
"updated_at" => "2016-03-11 12:10:23"
"deleted_at" => null
]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [
0 => "*"
]
#dateFormat: null
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
+wasRecentlyCreated: false
#forceDeleting: false
}
]
}
我什至使用了 DB::getQueryLog() 并且在任何地方都没有看到“oos_at”被显式设置/更新....
我的代码中没有其他地方修改过此表...
有人知道这里发生了什么吗????谢谢!!
=============
表迁移::
Schema::create('pusher_out_of_stocks', function (Blueprint $table) {
$table->increments('id');
$table->integer('pusher_id');
$table->integer('location_id');
$table->integer('product_id');
$table->timestamp('oos_at');
$table->timestamp('restocked_at')->nullable();
$table->timestamps();
$table->softDeletes();
});
PusherOutOfStock 类
class PusherOutOfStock extends Model
{
use SoftDeletes;
protected $fillable = [
'pusher_id',
'location_id',
'product_id',
'oos_at',
'restocked_at',
];
protected $dates = [
'oos_at',
'restocked_at'
];
/**
* A PusherOutOfStock belongsTo a Product
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function product()
{
return $this->belongsTo(Product::class);
}
/**
* A PusherOutOfStock belongsTo a Pusher
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function pusher()
{
return $this->belongsTo(Pusher::class);
}
/**
* A PusherOutOfStock belongsTo a Location
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function location()
{
return $this->belongsTo(Location::class);
}
}
首先,它会在我的 API 命名空间中访问我的 InventoryController
public function upload(Request $request)
{
$data = $request->all();
$header = $this->getHeader($data);
$body = $this->getBody($data);
$reader = $this->getReaderFromHeader($header);
if ( ! $this->guardAgainstNoReader($reader))
return (new Response("Reader with mac-address: ". $header['reader_mac'] . " does not exist.", 409));
$result = $this->inventoryRepository->uploadPusherData($reader, $header, $body);
return $result;
}
然后它将请求发送到 InventoryRepository
public function uploadPusherData(Reader $reader, $header, $body)
{
foreach ($body as $pusherData)
{
$result[] = $this->processPusherData($pusher, $header['timestamp'], $pusherData);
}
return $result;
}
然后,在存储库中,它一次处理一行(在我的测试中,只有一行)
private function processPusherData(Pusher $pusher, $timestamp, $pusherData)
{
$latestInventory = $pusher->latestInventory;
if (! $latestInventory)
return $this->updatePusher($pusher, $timestamp, $pusherData);
if ($latestInventory->tags_blocked == $pusherData['data_TAGSBLKED'])
return $this->noChangeRecorded($pusher, $latestInventory, $timestamp);
return $this->updatePusher($pusher, $timestamp, $pusherData);
}
然后推送器更新...
public function updatePusher($pusher, $timestamp, $pusherData)
{
// See if there are any existing already
$prevInv = $pusher->latestInventory;
// Create the new data
$inventory = Inventory::create([
'pusher_id' => $pusher->id,
'product_id' => $pusher->product_id,
'reader_id' => $pusher->reader->id,
'tags_blocked' => $pusherData['data_TAGSBLKED'],
'paddle_exposed'=> $pusherData['paddle_exposed'],
'created_at' => Carbon::createFromTimestamp($timestamp)
->toDateTimeString(),
]);
if ( !$prevInv || $prevInv->id == $inventory->id )
{
return "first-data" . $timestamp;
}
return $this->checkForEvents($inventory, $prevInv);
}
我们检查是否应该触发任何事件......在这种情况下,之前的库存有 9 件商品......现在有 0 件。
private function checkForEvents(Inventory $currentInventory, Inventory $previousInventory)
{
if ( ! $previousInventory->oos && $currentInventory->oos && $previousInventory->pusher->oos_notified == 0)
{
$currentInventory->pusher->oos_notified = true;
$currentInventory->pusher->save();
return Event::fire(new InventoryOutOfStock($currentInventory));
}
if ( ( $previousInventory->oos || $previousInventory->status == "RESTOCK" )
&& $currentInventory->tags_blocked > 2 )
{
return Event::fire(new PusherWasRestocked($currentInventory));
}
if ( $currentInventory->status == "RESTOCK" && $previousInventory->pusher->low_stock_notified == 0)
{
$currentInventory->pusher->low_stock_notified = true;
$currentInventory->pusher->save();
return Event::fire(new LowStockAlert($currentInventory));
}
return "no-events";
}
这将触发事件 InventoryOutOfStock
这会触发 3 个事件...其中 2 个与正在发送的通知等相关。
'App\Events\InventoryOutOfStock' => [
'App\Listeners\InventoryOutOfStockUpdater',
'App\Listeners\EmailInventoryOutOfStockNotification',
'App\Listeners\SMSInventoryOutOfStockNotification',
//'App\Listeners\OutOfStocksUpdater', ],
这导致我们......
public function handle(InventoryOutOfStock $event)
{
$pusher = $event->pusher;
$inventory = $event->inventory;
$product = $pusher->product;
$oos = $pusher->setAsOutOfStock($inventory->created_at);
$locationPushers = $product->getPushersByLocation($pusher->location);
$isInStock = false;
foreach ($locationPushers as $pusher)
if ($pusher->oos == 0)
$isInStock = true;
if (! $isInStock)
$product->productOutOfStocks()->create([
'location_id' => $pusher->location_id,
'oos_at' => $event->inventory->created_at,
]);
}
最佳答案
我认为你不必使用 timestamp
方法来创建你的字段,但你应该使用 dateTime
方法:
Schema::create('pusher_out_of_stocks', function (Blueprint $table) {
$table->increments('id');
$table->integer('pusher_id');
$table->integer('location_id');
$table->integer('product_id');
$table->dateTime('oos_at');
$table->dateTime('restocked_at')->nullable();
$table->timestamps();
$table->softDeletes();
});
这应该有效:)
希望对您有所帮助!
关于mysql - Laravel - Eloquent 地覆盖自定义时间戳......为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35946136/
我是 Laravel 的新手,我正在处理我的数据库迁移。对于一个表,我在表定义中包含了 $table->timestamps() 快捷方式。令我沮丧的是,我发现在我为表设置种子后,created_at
我有一个任务需要显示每种类型的假期,其中 id 是奇数。当我尝试在 Eloquent 中执行它时,它总是给我一个错误。 查询 Select holiday_type.id, holiday_type.
我有一个任务需要显示每种类型的假期,其中 id 是奇数。当我尝试在 Eloquent 中执行它时,它总是给我一个错误。 查询 Select holiday_type.id, holiday_type.
好的,我有型号 A链接到许多模型 B , 所以型号 A有一个 hasMany与模型的关系 B和型号B有一个 belongsTo与模型的关系 A . 但是,在所有这些中B有一个特定的,例如具有较高值的
如何应用 Laravel 的 Eloquent whereIn() 以便它包含 null? 我已经尝试过: User::whereIn("column", [null, 1, 2]) -> get()
我有一张库存变动表,其中显示了产品的历史记录(接收、移动位置等) 我有两个计算(通过总和)的查询: 原收到数量。 当前的实时数量(在事物被移动之后)。 这两个查询都返回相同模型的集合。它们将始终具有相
我一直在研究 Slim 2,最近才开始部署到生产服务器。到目前为止,一切似乎都运行正常。我能够登录,所以我知道我正在连接到数据库就好了。它识别出我登录的人,识别出我作为该用户拥有的权限。我有另一个表有
我在 Eloquent 中使用 orWhere 时遇到问题。 我有一个团队,这个团队有一些资料。我想获取状态 = 1 或状态 = 2 的所有配置文件。但我无法让它工作。 我的代码是这样的: $prof
在 Zizaco/entrust的 Laravel Entrust,如何设置与 Eloquent 的 Entrust 类关系,以便获得角色拥有的权限列表,如下所示: // get admin role
我想为我的两个表创建一个汇总报告,一个是员工表,另一个是 sims 表。这些表具有一对多的关系。我知道我们可以通过使用导出模型的数据->fromModel($model)但是有没有办法让我可以根据这两
我有两个模型,一个是扩展 Jenssegers\Model 的 mongo 模型,另一个是扩展 Illuminate\Model 的 sql 模型。这个 sql 模型没有定义连接名称,因为我们有多个数
我有两个多对一关系的模型: class Meal extends \Eloquent { /** * public Integer $id; - primary key
到目前为止,Vue2 对我来说读起来非常好,但除了这一点我很难调试。 Shop-show.vue ..... ..... {{shop.user.id}} .....
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this q
我需要获取第二个表的 ID。我无法避免使用 INNER JOIN,因为我必须按第二个表中的列对结果进行排序。 这是我的两张 table events id name .... date
我正在尝试为我的用户提供 Laravel hiscores 分页表的排名数字。 这是我发现有效的 MySQL 查询。我正在尝试将其作为 Laravel Eloquent 查询来使用。 select @
我的产品模型上有这种关系。 public function productInventory(){ return $this->hasOne('App\Models\Ecommerce
我正在尝试在 Laravel 5.5 应用程序中为一个包含关系数据的表添加种子。 我有这两个表/模型: 用户 问题 在 app\User.php 模型文件上;我有以下 hasMany 关系: publ
我重写了这个帮助请求,并简化了我试图尽量减少移动部件数量的内容。 我是一名经验丰富的 OOP 程序员,但这是我使用 LAMP、Laravel 或 Eloquent 的第一个项目。 我正在 Larave
我正在使用 Laravel 和 MongoDB (jenssegers/laravel-mongodb) 开发一个网络应用程序。 在使用 php artisan make:model 创建新模型时,命
我是一名优秀的程序员,十分优秀!