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