鉴于Laravel 5 Eloquent模型,如何在一个查询中更新关系中的所有模型?

时间:2017-01-20 21:40:55

标签: laravel eloquent

我有一个有很多工作的模特公司。公司和Job代表mysql表。

此处简化课程:

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

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

2 个答案:

答案 0 :(得分:4)

你可以这样做:

$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]);
}

答案 1 :(得分:2)

据我所知,没有理由不在公司模型中使用作业模型。这样的事情对你有用吗?

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