PHP Activerecord模型计数关联

PHP Activerecord模型计数关联,php,activerecord,model,count,associations,Php,Activerecord,Model,Count,Associations,我有三张桌子: Member MemberBranch Branch 成员可以通过成员分支拥有多个分支e。一个分支可以有许多成员等 我想做的是计算一个分支机构有多少成员 所以 我该怎么做呢?试试这个: SELECT B.*, (SELECT count(*) as total from MembersBranch where branch_id = B.id) as total FROM Branch AS B; 以防万一其他人也有类似的问题,我已经找到了一个解决方案(尽管有点老套) 这

我有三张桌子:

Member

MemberBranch

Branch
成员
可以通过
成员分支
拥有多个
分支
e。一个
分支
可以有许多
成员

我想做的是计算一个分支机构有多少成员

所以

我该怎么做呢?

试试这个:

SELECT B.*, (SELECT count(*) as total from MembersBranch where branch_id = B.id) as total FROM Branch AS B;

以防万一其他人也有类似的问题,我已经找到了一个解决方案(尽管有点老套)

这将创建一个新的关联,但不会使用select属性执行我们想要的SQL查询。现在可以访问每个分支的成员数,如下所示:

$branch->members->total

我之所以使用
$has\u one
而不是
$has\u many
是因为
$has\u many
始终会返回对象的
数组,即使只有一个对象。因此,使用
$has\u many
将意味着像这样访问总数:

$branch->members[0]->总计


保存您的击键:)

谢谢您的评论。我通常会这样做,但我使用的是ActiveRecord,它是一个用类包装表的库,因此每个表行都成为自己的对象。我需要ActiveRecord本身的解决方案,而不是纯SQL。我的错!我认为这是一个带有静态方法的常规PHP类。问题,您是否在类定义中添加了$alloy_to?我以前不属于,但我想出了一个办法。我补充我的答案。
SELECT B.*, (SELECT count(*) as total from MembersBranch where branch_id = B.id) as total FROM Branch AS B;
class Branch extends \ActiveRecord\Model {

    static $has_one = array(
        array(
            'members',
            'class_name' => 'MemberBranch',
            'primary_key' => 'id',
            'foreign_key' => 'branch_id',
            'select' => 'COUNT(`membership_id`) AS `total`'
        )
    );
}