在Laravel 5.1中,使用Eloquent ORM,如何为每个关系更新单个属性?


In Laravel 5.1, using Eloquent ORM, how does one update a single attribute for every relation?

我到处找文件,就是找不出这个。假设我已经建立了一个具有hasMany关系的模型,其逆关系如下:

    class MasterAccount extends Model {
    //master_account_id exists as a foreign key in sub_account table 
    //and references primary key in master_account table as
    //defined in the migrations I set up for this
    public function SubAccounts()
    {
        return $this->hasMany('App'SubAccount');
    }
}

并且我已经确保一些子帐户在master_account_id列中具有与主帐户的主id匹配的值。

我已经通过dd()在我的控制器中的值测试了这种关系,像这样:

public function edit(MasterAccount $masterAcct)
    {
        dd($masterAccount->subAccounts);
    }

这确实成功地返回了所有相关模型的集合。然而,我不知道如何为belongsTo MasterAccount的每个模型更新单个属性——难道不应该有这样的级联方式吗?我通过这样做来破解它:

<?php namespace App'Http'Controllers;
use App'SubAccount;
public function update(MasterAccountRequest $request, MasterAccount $masterAccount)
    {
        //current request id
        $id = $masterAccount->id;
        //cascade global value to related Accounts
        if ($request->some_value == 1)
        {
            //look more into this... ARGH!!!
            SubAccount::where('master_account_id', '=', $id)->update(['this_value' => 1]);
        }
}

这是有效的,但我只知道有一些"雄辩"的方法来做到这一点.....对吗?

根据文档,这应该可以工作:

<?php namespace App'Http'Controllers;
use App'SubAccount;
public function update(MasterAccountRequest $request, MasterAccount $masterAccount)
    {
        //current request id
        $id = $masterAccount->id;
        //cascade global value to related Accounts
        if ($request->some_value == 1)
        {
            //look more into this... Wooooot!!!
            $masterAccount->SubAccounts()->update(['this_value' => 1]);
        }
}