1

私はPHPActiveRecordを使用しています。テーブル Manager とテーブル Employees があるとします。マネージャーには複数の従業員がいて、従業員にはマネージャーが 1 人います。

私はこの関連付けを定義しました:

  • モデルマネージャー:static $has_many = { array('employee')}
  • モデル従業員:static $belongs_to = { array('manager')}

$manager->employeeEmployee インスタンスの配列が返ってきます。

最も古い従業員を選択するにはどうすればよいですか? または最後の従業員の名前。連想データで条件を使用するにはどうすればよいですか? 以下のように関連付けを拡張できます。

  • モデルマネージャー: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 に答える