私は、データベースが照会されるたびsfGuardUserProfile
に、関連するsfGuardUser
.
Propel 1.2 を使用していた場合、通常doSelectStmt
はクラスのメソッドをオーバーライドしsfGuardUserProfilePeer
て検査し、必要に応じてクラスのメソッドをCriteria
変更します。ただし、Doctrine でこれを行う方法がわかりません。hydrate
sfGuardUserProfile
イベントリスナーを使用できます。それらの詳細については、ドクトリンのドキュメントを参照してください:イベント リスナー
symfony 1.4 では sfGuardUser を変更できます。デフォルトでは lib/model/doctrine/sfDoctrineGuardPLugin/sfGuardUser.class.php にあります。次の preDqlSelect() メソッドを追加して、クエリを変更できます。テストされていないことに注意してください。
class sfGuardUser extends PluginsfGuardUser
{
public function preDqlSelect($event)
{
$params = $event->getParams();
$query = $event->getQuery();
$alias = $params['alias'] . '.Profile';
if ((!$query->isSubquery() || ($query->isSubquery() && $query->contains(' ' . $params['alias'] . ' '))) && !$query->contains($alias))
{
$query->innerJoin($alias);
}
}
}
機能させるには、DQL コールバックを有効にする必要があります。ProjectConfiguration クラスでそれを行うことができます:
class ProjectConfiguration extends sfProjectConfiguration
{
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
}
}
私はCoronatusに同意しますが、あなたがやろうとしていることは次の方法で達成できると思います:
http://www.symfony-project.org/plugins/sfGuardPlugin
「sfGuardUser モデルをカスタマイズする」を参照してください。
基本的に、プロファイルは「sf_guard_user_profile」と呼ばれ、関係が設定される必要があり、その後、使用できるようになります:
$this->getUser()->getGuardUser()->getProfile();
一部の構成ファイルの目的には正しいプロファイル モデル名が必要だと思いますが、間違っている可能性があります。