Php Laravel获取具有条件的所有子节点计数
我正在我的应用程序中使用。在这里,我有一个表名users和user表的模式,如下所示Php Laravel获取具有条件的所有子节点计数,php,mysql,eloquent,laravel-5.1,Php,Mysql,Eloquent,Laravel 5.1,我正在我的应用程序中使用。在这里,我有一个表名users和user表的模式,如下所示 id Name Parane_id Node 1 ABC 0 2 XYZ 1 L 3 DFS 1 R 4 GJK 2
id Name Parane_id Node
1 ABC 0
2 XYZ 1 L
3 DFS 1 R
4 GJK 2 L
5 DSG 3 L
6 FAF 4 R
7 KES 2 R
我想对用户1(即2,4,6,7)的所有用户左侧进行计数,因此计数为4
若我想要2的右边,那个么它将返回7,所以计数是1
使用Laravel Elount
怎么可能做到这一点
非常感谢您的帮助。您希望在特定条件下计算树节点的数目,在本例中,这是节点的左子节点 为您的
用户定义子项。然后创建一个函数遍历子树并进行计数
class User extends Model {
public function children()
{
return $this->hasMany('App\User', 'parent_id');
}
public function countChildren($node = null)
{
$query = $this->children();
if (!empty($node))
{
$query = $query->where('node', $node);
}
$count = 0;
foreach ($query->get() as $child)
{
$count += $child->countChildren() + 1; // Plus 1 to count the direct child
}
return $count;
}
}
要计算用户id 1的左侧子项
$user = User::find(1);
$count = $user->countChildren('L');
“用户1上的所有用户左侧”是什么意思?您能提供更多关于左侧和右侧的解释吗?@mdamia就像每个人都有两条腿一样,一条腿是左侧的,另一条腿是右侧的,所以如果我有孩子,我会将它们添加为左侧或右侧。所以基本上每个父母最多有两个孩子,孩子有子孩子等等。因此,在我的示例中,您可以看到用户ABC
有两个子2,3,其中XYZ
是左侧(节点:L表示左侧,R表示右侧),而DFS
是右侧。希望你能得到它,如果没有,请让我知道。要了解更多信息,请查看图片是否有更好的方法来计算拉雷维尔的孩子数?