2017-01-26 10 views
1

をlaravelするために特定の番号を追加する私は2つの関連のモデルを持って、何も特別などのようwithCount方法

class ModelOne extends Model { 

    ... 
    public function model_two() { 
     return this->hasMany(ModelTwo::class, 'foreign_key'); 
    } 
} 

と:

class ModelTwo extends Model { 

    ... 
    public function model_one() { 
     return this->belongsTo(ModelOne::class, 'foreign_key'); 
    } 
} 

そして、私が持っている私のget関数で:

public function get() { 
    return ModelOne::withCount('model_two')->get(); 
} 

そして、私はこのような素晴らしい応答を得ます:

{ 
    "property_one": "property_one_value", 
    "property_two": "property_two_value", 
    "property_three": "property_three_value" 
    "model_two_count: 5 
} 

は、しかし、私に必要なのは「2」は、例えば、その数に一定数を追加することで、その代わりに、上記のJSONオブジェクトの、私はこのようにそれを持ってしたいと思います:どのような方法があります

{ 
    "property_one": "property_one_value", 
    "property_two": "property_two_value", 
    "property_three": "property_three_value" 
    "model_two_count: 7 
} 

それをするには?

答えて

1

withCount()にする場合は、withCount()getRelationCountQueryのメソッドをオーバーライドできます。

簡単な方法は、map()ヘルパーを使用してコレクションを変更することです:

public function get() { 
    $data = ModelOne::withCount('model_two')->get(); 
    return $data->map(function ($i) { 
     $i->model_two_count = $i->model_two_count + 2; 
     return $i; 
    }); 
} 
関連する問題