この問題はしばらく解決していません。解決策が見つからないので、助けてください。Laravel - ツリー構造のカウントを取得します。ここで、親の数は子供の数の合計です。
私は2つの関連モデルModelOne
も持っていて、それ自体に関連しており、子供、孫など無限の数を持つことができ、ModelTwo
に関連しています。私のget関数で
class ModelOne extends Model
{
...
public function model_two()
{
return $this->hasMany(ModelTwo::class, 'foreign_key');
}
//recursively get all children, grandchildren etc.
public function children() {
return $this->hasMany(ModelOne::class, 'foreign_key')->with('children');
}
public function parent() {
return $this->belongsTo(ModelOne::class, 'foreign_key');
}
}
class ModelTwo extends Model
{
...
public function model_one()
{
return $this->belongsTo(ModelOne::class, 'foreign_key');
}
}
ModelOne
から私が持っている:
public function get($id = null) {
return is_null($id) ?
ModelOne::withCount('model_two')->get() :
ModelOne::withCount('model_two')->where('id', $id)->first();
}
、それは私に素敵な1次元のオブジェクトの配列(または1つのオブジェクト)を与え、私は必要ModelTwo
関連カウント形式と、関連するすべてのオブジェクトの個数が個別にカウントされます。
私は必要なもので、そのすべての子、孫など ですから、例えば、もしからカウントの合計と、そのオブジェクトにカウントする子供、孫などを、持っているリターン・アレイ内のすべてのオブジェクトのModelOne
id = 2、parent_id = 1、countが3であるオブジェクトと、id = 3、parent_id = 1、countが2のオブジェクトを持つModelOne
というオブジェクトが1つあり、id = 1のオブジェクトの場合、カウントは5になります。このロジックは、すべてのノードのツリー内で続けられます。
[
{
"id":1
"parent_id":"NULL",
"model_two_count":5
},
{
"id":2
"parent_id":1,
"model_two_count":3
},
{
"id":3
"parent_id":1,
"model_two_count":2
}
...
]