2017-01-26 2 views
1

У меня есть два взаимосвязанных моделей, ничего особенногоКак добавить определенное количество не Laravel 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'); 
    } 
} 

И в моей функции ПОЛУЧИТЬ у меня есть:

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