1

我使用 PHPActiveRecord。假设我有一个表 Manager 和一个表Employees。一个经理有多个员工,一个员工有一个经理。

我已经定义了这个关联:

  • 模型经理:static $has_many = { array('employee')}
  • 模范员工:static $belongs_to = { array('manager')}

$manager->employee给我一个包含 Employee 实例的数组。

如何选择最年长的员工?或最后一个员工的姓名。如何在关联数据中使用条件?我可以像下面这样扩展关联:

  • 模型经理:static $has_many = { array('employee', 'order' => 'age desc', 'limit => 1')}

或者

  • 模型经理:static $has_many = { array('employee', 'order' => 'id desc', 'limit => 1')}

但是有了这个解决方案,我必须为每个新案例创建一个新的关联。

是否存在更好的解决方案?像下面这样的东西?

  • $manager->employee->last()->name选择最后一名员工的姓名

  • $manager->employee->find('limit => 1, 'order' => 'age desc')选择最后一名员工

4

1 回答 1

2

这是一个有点老的问题,但我觉得它至少需要一个答案。

您可以为同一个类定义多个关系。我不确定你是否明确想要避免这种情况,并且没有修改框架以$manager->employee->返回某种你不走运的对象。

public static $has_one = array(
    array('last_employee', 'class_name'=>'Employee',/** conditions **/ 'foreign_key'=>'manager_id'),
    array('oldest_employee', 'class_name'=>'Employee',/** conditions **/ 'foreign_key'=>'manager_id'),
);

然后您可以调用$manager->last_employee;$manager->oldest_employee。我觉得即使是像范围这样的东西也不能完全满足你的需求,所以这似乎是一个很好的解决方案。

于 2013-02-06T21:19:04.043 回答