Thinkphp5 爬过的坑

记录使用过程中遇到的坑

  1. * validate 验证器中的date规则 *
    如下validate :
class PartTime extends Validate
{
protected $rule = [
        'birtyday' => 'require|date'
    ];
protected $message = [
        'birtyday.require' => '生日必填',
        'birtyday' => '生日格式错误',
    ];
}
// 调用验证
$result = $this->validate($data, 'PartTime');

if (true !== $result) {
    return $this->outMessage([], '-2', $result);
}

问题(坑):
当data里的birtyday 值为:‘x’一位字符串时,验证不会检测到错误,这明显不是时间格式字符串。
但是’xx’ 一位以上的字符串,验证能检测到错误。
我们看看它的源码:

case 'date':
   // 是否是一个有效日期
   $result = false !== strtotime($value);
   break;

问题就在这里了,我们可以测试以下:

if (false !== strtotime('s')) {
    echo 'ssss';
}

输出 : ssss
所以这个验证方法是有问题的,稍微改下:

case 'date':
  // 是否是一个有效日期
  $result = (false !== strtotime($value) && strlen($value) > 1);
  break;

—————————————–完美分割线————————————————–
2. * 模型with方法 *
这个坑在模型关联“懒加载”的方法with上,错误写法:

public function getDataWithRelation($xxId)
{
    return $this->where('xx_id', $xxId)->with('post, industry')->select();
}
public function post()
{
    return $this->beLongsTo('Post', 'post_id', 'id')->field('id, name');
}

public function industry()
{
    return $this->beLongsTo('Industry', 'industry_id', 'id')->field('id, name');
}
// 注意上面的with里面第二个关联模型xxz之前有个空格

这样写法,测试会报错:
这里写图片描述
我的编码习惯,都是会在’,’后面跟个空格,在这里就会报错。
看他源码:它是直接把with里面的参数,直接用explode(‘,’, $with),然后拼接字符串,这样空格就存在问题了,优化的话,可以explode后,用trim去除空格,或者拼接之前trim。
正确写法,把那个空格去掉就可以了。

public function getDataWithRelation($xxId)
{
    return $this->where('xx_id', $xxId)->with('post,industry')->select();
}

—————————————–完美分割线————————————————–
3. model 的create 和save 问题:
问题处在allowField()方法,只能save用,create 不行。就是新增时如果想使用allowField()方法过滤非数据库表字段,不能使用

$this::allowField(true)->create($data);

只能使用:

$this::allowField(true)->save($data);

我需要保存后返回新增的对象给我,所以要用到create,save只返回新增的ID。
看源码发现:create 方法提供第二个参数,field,可以设置,但是没有allowField那么方便。
解决我的这个问题,办法就是使用:

$this::allowField(true)->create($data, 'name, xxx,xx,xxxx');

—————————————–完美分割线————————————————–
4. 模型关系配置问题
在配置关联关系时,如果要过滤字段,字段里必须要有关联关系的id,否则会报错

return $this->hasMany('app\job\model\Company', 'userid', 'id')->field('id, name');

会报错:
这里写图片描述
必须加上:

return $this->hasMany('app\job\model\Company', 'userid', 'id')->field('id, name, userid');

而在配置beLongsTo的时候就得跟上id。
—————————————–完美分割线————————————————–
5. 模型关联查询的巨坑
配置好关联关系后,如果是层级查询时,同一个层级的多个子模型查询会被最后一个覆盖,直接见代码:

$this->where('id', $id)->field('id, title, userid, post_id, salary_range_id, welfare_id, num, qualifications_id, job_year_id, address, linkman, tele, describe, update_time')->with('post,salaryRange,welfare,member.company.companyScale,member.company.companyNature,member.company.industry')->find();

这里想要查询出member.company 的companyNature,industry,companyScale,机会有大问题:

"member": {
    "id": 28,
    "company": {
        "id": 1,
        "name": "云紫峰",
        "userid": 28,
        "company_scale_id": 2,
        "company_nature_id": 3,
        "industry_id": 2,
        "industry": {
            "id": 2,
            "name": "会计/金融/银行/保险"
        }
    }
}

最后一个配置的是industry 会覆盖之前的companyNature,companyScale
* 问题已经找到,是with里面写法问题 *
正确写法:

$this->where('id', $id)->field('id, title, userid, post_id, salary_range_id, welfare_id, num, qualifications_id, job_year_id, address, linkman, tele, describe, update_time')->with(['post','salaryRange','welfare','member.company' => ['companyScale','companyNature','industry']])->find();

预加载同一个模型的多个子模型要使用数组方式传入。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ThinkPHP5 ERP 是一种基于ThinkPHP5框架开发的企业资源管理系统。ThinkPHP5是一种高效、快速、简洁的PHP开发框架,它集成了许多常用功能和工具,使开发人员可以更快速地构建功能强大的应用程序。 ThinkPHP5 ERP 是为企业提供管理和优化资源的一种解决方案。它涵盖了企业各个方面的管理需求,包括人力资源、财务、供应链、物流、销售、采购等,帮助企业提高效率、降低成本、提供更好的服务。 使用ThinkPHP5 ERP,企业可以实时跟踪和管理各个环节的业务数据,通过数据分析和报表功能,可以进行精细化的业务管理和决策。同时,它还具备权限管理、多语言支持、多平台适配等功能,使企业可以根据自身需求进行定制和扩展。 ThinkPHP5 ERP 的特点还包括安全性和稳定性。它采用了一系列安全机制,如数据加密、访问控制等,保证企业数据的安全;同时,通过框架的优化设计和缓存技术,使系统具备较高的稳定运行能力。 总而言之,ThinkPHP5 ERP 是一种强大的企业资源管理系统,它结合了ThinkPHP5框架的优势和ERP解决方案的全面性,为企业提供了集中管理和优化资源的工具,有助于企业提高效率、降低成本、实现可持续发展。 ### 回答2: ThinkPHP5 ERP 是基于ThinkPHP5 框架开发的一款企业资源规划(ERP)管理系统。它为企业提供了全面的管理和控制功能,助力企业实现高效的运营管理。 ThinkPHP5 ERP 系统具备多个主要模块,包括销售管理、采购管理、库存管理、财务管理、人力资源管理等。这些模块之间能够实现数据的交互和共享,使得企业内部的各个部门能够有效协作,提高工作效率。 销售管理模块可以帮助企业实现从订单管理到客户关系管理的全过程管理。通过销售模块,企业可以更好地了解客户需求,提供个性化的服务,增加客户满意度。 采购管理模块可以帮助企业实现从供应商选择、采购申请到采购订单管理的全过程管理。通过采购模块,企业可以更好地管理供应链,控制采购成本,提高采购效率。 库存管理模块可以帮助企业实现从采购入库到销售出库的库存管理。通过库存模块,企业可以实时了解库存状态,避免过多的库存积压,提高资金利用效率。 财务管理模块可以帮助企业实现财务核算、财务报表生成等功能。通过财务模块,企业能够准确了解财务状况,确保财务数据的准确性和可靠性。 人力资源管理模块可以帮助企业实现人员招聘、员工培训、绩效考核等功能。通过人力资源模块,企业可以最大程度地发挥员工的潜力,提高整体团队的工作效率。 总之,ThinkPHP5 ERP 系统是一款功能全面、易于使用的企业管理软件,能够帮助企业实现高效管理和运营。它具有良好的扩展性和稳定性,在实际应用中已经显示出了很好的效果,也得到了广大企业的认可和好评。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟没翅膀

你的打赏是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值