Score
0
Watch 318 Star 1.2K Fork 506

GVPAnyon / ThinkAdminPHPMIT

对数据操作及软删除的建议

Rejected
隔壁老李  Opened this issue

个人在使用ThinkAdmin开发中遇到了这样一个问题:
在些复杂的业务逻辑中,使用Db查询数据表时须要使用很多的join查询;而且在不同的方法里也须要用到同样的join查询,所以写起来很是麻烦。个人比较懒,所以采使用的Tp内置Model类预定义关联查询来解决上述的问题。
唯一有麻烦的是ThinkAdmin的默认软删除字段是is_deleted, 而thinkphp的默认软删除字段是delete_time,所以又得在Model里自定义场景查询;但又感觉样的代码比较繁复,不够理想。
虽然作者不使用Model,但我想在使用ThinkAdmin的人中有很多人和我一样都喜爱Model用法。所以呼吁:
不求作者去兼容Model,但求ThinkAdmin数据操作规则能与thinkphp保持一致,这样对使用ThinkAdmin中喜爱Model用法开发者们更加的友好。

437240 yangyongan 1578923842 126695 zoujingli 1578918740 329472 empiror 1587199512 total 4 participants

Comments (7)

437240 yangyongan 1578923842
杨永安 2020-03-12 14:57

附议

126695 zoujingli 1578918740
Anyon 2020-03-13 14:18 owner

Model 的软删除是支持自定字段及默认值,ThinkLibrary 已经使用,不好再做调整
https://www.kancloud.cn/manual/thinkphp6_0/1037594

329472 empiror 1587199512
Atlaxy 2020-04-15 09:33

我是放弃了Model方法,其他地方也清一色用_page_filter 感觉比model方便? :sweat_smile:

隔壁老李 2020-04-15 09:44

@Atlaxy 后台管理大多数情况确实不需要用到model,但对于订单这类关联较多的表应当用model;使用方式可以和 _page_filter 这些过滤回调结合,可以看看我的代码:

  public function index()
    {
        return $this->_query($this->table)
            ->equal('cate_id,member_id')
            ->like('title')
            ->whereNotIn('status', [CARD_STATUS_SK])
            ->page();
    }

    protected function _page_filter(&$data)
    {
        foreach ($data as &$vo) {
            $vo = new MemberCardModel($vo);
        }
    }

这样在tamplate中,$vo变量就变成一个模型对象了,这时就可以大量的使用模型属性和方法了。

329472 empiror 1587199512
Atlaxy 2020-04-15 18:21

@隔壁老李
我的订单类的生成基本都是在接口端,后段需要的操作并不是很多,展示数据基本都是在foreach里重新赋值。

437240 yangyongan 1578923842
杨永安 2020-04-26 15:41

@Atlaxy 后台管理大多数情况确实不需要用到model,但对于订单这类关联较多的表应当用model;使用方式可以和 _page_filter 这些过滤回调结合,可以看看我的代码:

public function index()
{
return $this->_query($this->table)
->equal('cate_id,member_id')
->like('title')
->whereNotIn('status', [CARD_STATUS_SK])
->page();
}
protected function _page_filter(&$data)
{
foreach ($data as &$vo) {
$vo = new MemberCardModel($vo);
}
}

这样在tamplate中,$vo变量就变成一个模型对象了,这时就可以大量的使用模型属性和方法了。

@隔壁老李 这样出来的结果是不是在循环中查询了?

隔壁老李 2020-04-29 13:54

@隔壁老李 这样出来的结果是不是在循环中查询了?

@杨永安 直接new Model并传入参数这种方式不参与数据查询,只有去访问到不存在的属性时才会去查询,这TP是内置的懒加载;

Sign in to comment

Assignees
Labels
Not set
Projects
Milestones
Branches
Planed to start
Not set
Planed to end
Not set
Top level
Priority
PHP
1
https://gitee.com/zoujingli/ThinkAdmin.git
git@gitee.com:zoujingli/ThinkAdmin.git
zoujingli
ThinkAdmin
ThinkAdmin

Search