商品创建后,再次编辑,直接找到最低价格的 SKU 移除后保存,商品数据库价格不会更新,请问怎么解决?谢谢!

情况如下:商品创建后,再次点击编辑,直接找到最低价格的SKU移除后保存,商品数据库价格不会更新,其实移除别的价格也不会更新,只是移除最低价格时比较明显看到结果。请问怎么解决?谢谢!
尝试过如下 方案,利用保存后事件回调,但不成功。

 $form->saved(function (Form $form) {
                $form->model()->price = collect($form->model()->skus())->min('price');
                'or'
                 $form->model()->price = collect($form->model()->skus)->min('price');
                 'or'
                  $form->model()->price = collect($form->skus)->min('price');
            });
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案

追查了一下 Laravel-Admin 的代码,找到问题根源,解决方案:

$form->saving(function (Form $form) {
    // 加了一个 where(Form::REMOVE_FLAG_NAME, 0)
    $form->model()->price = collect($form->input('skus'))->where(Form::REMOVE_FLAG_NAME, 0)->min('price');
});

当我们在前端移除一个 SKU 的之后,点击保存按钮时 Laravel-Admin 仍然会将被删除的 SKU 提交上去,但是会添加一个 _remove_=1 的字段:如图:

file

正常的 SKU 的 _remove_ 字段是 0,因此我们在查找最低价格时只需要查询 _remove_=0 的 SKU 即可。

5年前 评论
leo (作者) 4年前
zjnn 4年前
讨论数量: 8
leo

追查了一下 Laravel-Admin 的代码,找到问题根源,解决方案:

$form->saving(function (Form $form) {
    // 加了一个 where(Form::REMOVE_FLAG_NAME, 0)
    $form->model()->price = collect($form->input('skus'))->where(Form::REMOVE_FLAG_NAME, 0)->min('price');
});

当我们在前端移除一个 SKU 的之后,点击保存按钮时 Laravel-Admin 仍然会将被删除的 SKU 提交上去,但是会添加一个 _remove_=1 的字段:如图:

file

正常的 SKU 的 _remove_ 字段是 0,因此我们在查找最低价格时只需要查询 _remove_=0 的 SKU 即可。

5年前 评论
leo (作者) 4年前
zjnn 4年前
leo

@zthvivid 我用 PHPStorm 来写代码,追踪代码也十分方便。

右键一个类、方法、函数、变量 -> Go To -> Declaration 可以找到定义这个东西的代码
右键一个类、方法、函数、变量 -> Find Usage 可以找到所有调用了这个东西的代码

这两个方法足以快速追踪绝大多数项目的源代码

5年前 评论
leo

追查了一下 Laravel-Admin 的代码,找到问题根源,解决方案:

$form->saving(function (Form $form) {
    // 加了一个 where(Form::REMOVE_FLAG_NAME, 0)
    $form->model()->price = collect($form->input('skus'))->where(Form::REMOVE_FLAG_NAME, 0)->min('price');
});

当我们在前端移除一个 SKU 的之后,点击保存按钮时 Laravel-Admin 仍然会将被删除的 SKU 提交上去,但是会添加一个 _remove_=1 的字段:如图:

file

正常的 SKU 的 _remove_ 字段是 0,因此我们在查找最低价格时只需要查询 _remove_=0 的 SKU 即可。

5年前 评论
leo (作者) 4年前
zjnn 4年前

:+1:!非常感谢!
我刚学这些东西,知道解决办法当然好,但我更想知道您是如何调试的,比如如何追踪源码,我自己做过这方面的尝试,但没有找到好的方式,就连这个提交数据都没有办法追踪到,请教能否告之一二,非常感谢!

5年前 评论
mouyong

@zthvivid debug_backtrace 了解一下 get_class 了解一下

5年前 评论

@蜗牛 嗯,非常感谢! :smile:

5年前 评论
leo

@zthvivid 我用 PHPStorm 来写代码,追踪代码也十分方便。

右键一个类、方法、函数、变量 -> Go To -> Declaration 可以找到定义这个东西的代码
右键一个类、方法、函数、变量 -> Find Usage 可以找到所有调用了这个东西的代码

这两个方法足以快速追踪绝大多数项目的源代码

5年前 评论

SKU移除了之后保存,数据并没有从数据库中删除啊?下次再进来那个SKU还存在。。呵呵

5年前 评论
xin6841414

@leo 弱弱的说一句,其实window下按住ctrl,鼠标单击就可以了, mac应该是command

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!