模型重建一个构造函数时参数顺序的问题

浏览:1074 发布日期:2018/09/06 分类:ThinkPHP5专区 关键字: 模型 构造函数 参数
做一个简单商城,需要根据客户等级展示不同折扣价格,开始时考虑将价格计算放在前端或者控制器中,但是考虑到实际使用时不利于统一,就考虑放到模型中,便于统一调用减少出错,由于需要传入用户等级,因此便在模型中建造了一个构造函数。namespace app\index\model;
use think\Model;
use think\Db;

class Base extends Model
{
    public $user;
    public $grade = null;
    public function __construct($data = [],$user = '')
    {
//执行model中的构造函数
        parent::__construct($data);
//这个是需要的参数,传递用户等级信息的
        $this->user = $user == '' ? ['user_id'=>0] : $user;
//下面这几行无关这个问题,仅仅是获取会员等级的折扣价格
        if (config('member_discount') === true) {
            $this->grade = cache('member_grade');
            if ($this->grade === false) {
                $this->grade = Db::name('member_grade')->cache('member_grade',3600*24*30)->column('discount','id');
            }
        }
    }
}
结果,如果是把function __construct($data = [],$user = ''),一切是正常的,可以显示数据,就是使用起来麻烦,比如需要$base_mod = new base([],$user);
为了使用方便,我改成function __construct($user = '' , $data = []),结果数据全变成空的了。顺藤摸瓜找到这个函数    public function newInstance($data = [], $isUpdate = false, $where = null)
    {
        return (new static($data))->isUpdate($isUpdate, $where);
    }
发现这个函数好像是把每一行数据都变成了当前的model对象(这点搞不懂,这不浪费很多资源吗?),估计是这里面传参造成了问题。
在此提出这个问题,一是想请各位大神给个实现不同会员价格折扣的更好的方法,二是想请大神给解释一下把每行数据重建当前模型的好处,本人小白一枚,恳请大神指点。
最佳答案
评论( 相关
后面还有条评论,点击查看>>