PHP activerecord:使用条件选择关联数据

时间:2012-08-22 10:36:13

标签: phpactiverecord

我使用PHPActiveRecord。假设我有一个表管理器和一个表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')选择最后一位员工

1 个答案:

答案 0 :(得分: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。 我觉得甚至像示波器这样的东西也不能完全满足你想要的东西,所以这似乎是一个很好的解决方案。