代码之家  ›  专栏  ›  技术社区  ›  James Moore

可观测更新值

  •  1
  • James Moore  · 技术社区  · 8 年前

    我的问题很简单 我希望每次用户选择包时,有效的\u直到列根据所选包递增; 为了解决这个问题,我创建了

     PackageObservable{
        public function creating(Package $package)
            {    DB::table('permit')
            ->select('permit.valid_until')
            ->join('package', 'user_id', '=', 'package.user_id')
            ->where('package.name','=',$package->name)
             ->addMonths(12);
            DB::table('permit')
                ->select('permit.name')
                ->join('package', 'user_id', '=', 'package.user_id')
                ->where('package.name','=','option3')
                ->addWeeks(1);
     }}
    

    问题是我不知道怎么拿到包裹。名称 包和许可证之间的关系如下:

    1. 包装(id、名称、条目编号、用户id、价格、六天交货)
    2. 许可证(id、user\u id、membership\u id、used\u entries、valid\u until、entries、flag\u six\u days) 提前感谢!我感谢你的帮助! 抛出:

    BadMethodCallException方法addMonths不存在。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Simon R    8 年前

    假设您的服务提供商中有如下内容

    public function boot()
    {
        Package::observe(PackageObservable::class);
    }
    

    包模型应该传递给可观察的类,以便获得包名称 $package->name 。如果此值为null,则在创建包时,您没有定义名称。

    以下命令所做的只是尝试运行select语句;

    DB::table('permit')
            ->select('permit.valid_until')
            ->join('package', 'user_id', '=', 'package.user_id')
            ->where('package.name','=',$package->name)
             ->addMonths(12);
    

    方法 addMonths 查询生成器上不存在。你有 addMonths() 许可证模型上的方法?

    你可能想按照

     $permit = Permit::select("valid_until")->where('user_id',$package->user_id)->orderBy('user_id', 'desc')->first(); 
    
     if ($permit) {
         $newValidUntil = $permit->valid_until->addMonths(12);
         $permit->update(['valid_until' => $newValidUntil]);
     }
    

    如果你发表评论让我知道你进展如何,我可以随时更新我的答案,以适应你需要的任何额外信息。

    推荐文章