我使用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')
选择最后一位员工
答案 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
。
我觉得甚至像示波器这样的东西也不能完全满足你想要的东西,所以这似乎是一个很好的解决方案。