【问题标题】:Given a Laravel 5 Eloquent model, how can I update all models on a relationship in one query?给定一个 Laravel 5 Eloquent 模型,如何在一个查询中更新关系上的所有模型?
【发布时间】:2017-06-05 23:33:01
【问题描述】:

我有一个模范公司,它有很多工作。 Company 和 Job 代表 mysql 表。

这里的简化类:

class Company extends Eloquent
{
   public function jobs()
    {
        return $this->hasMany('App\Models\Job');
    }
}

我想向此类添加一个函数,通过将每个作业的is_active 属性设置为0 来停用公司的所有作业。使用查询生成器,我可以通过一个简单的更新查询来完成此操作。有没有办法在一个查询中使用模型/关系而不是遍历每个作业?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    你可以这样做:

    $company = Company::first(); // Or some $company where you want to update the jobs
    $company->jobs()->update(['is_active' => 0]);
    

    如果您调用$company->jobs(),它将返回查询对象,您可以在其上链接查询方法。

    那么方法应该是这样的:

    public function deactivateJobs()
    {
        return $this->jobs()->update(['is_active' => 0]);
    }
    

    【讨论】:

      【解决方案2】:

      据我所知,没有理由不能在 Company 模型中使用 Job 模型。这样的东西对你有用吗?

      public function deactivateJobs()
      {
          App\Model\Job::where('company_id', $this->id)->update(['is_active' => false]);
      }
      

      【讨论】:

        猜你喜欢
        • 2018-03-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-06
        • 2021-08-27
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2019-11-03
        相关资源
        最近更新 更多