【发布时间】:2018-05-25 09:55:49
【问题描述】:
我有一个名为 settings 的表,其中包含典型的设置信息,如 isactive、activationdate 等,它们应该与许多其他实体相关联。现在我想知道是否可以将它放在SettingsBehavior 中,这样我只需将行为加载到我需要的所有表对象中。
我想过在SettingsBehavior::beforeFind()中添加这样的东西:
$event->getSubject()
->hasOne('Settings')
->setName('Settings')
->setForeignKey('parent_id')
->setConditions(['Settings.parenttype' => $event->getSubject()->getTable()]);
但是查询已经创建。至少我可以使用SettingsBehavior 向实体添加设置实体。
据我所知,在行为initialize() 中,我没有提及该主题。
然后我尝试在SettingsBehavior::beforeFind() 中执行此操作:
$query->leftJoin('Settings', [
$event->getSubject()->getAlias() . '.id = Settings.parent_id',
'Settings.parenttype' => 'users'
]);
但它也没有为我找到的实体添加设置。有没有人尝试过类似的东西,或者知道如何做到这一点?也许我什至通过行为尝试做这样的事情是错误的? 谢谢!
【问题讨论】:
-
好吧,玩了一圈,我发现
SettingsBehavior::beforeFind()中的以下代码可以工作:$event->getSubject() ->hasOne('Settings') ->setName('Settings') ->setForeignKey('parent_id') ->setConditions(['Settings.parenttype' => $event->getSubject()->getTable()]); $query->contain(['Settings']);我的实体现在包含一个设置。
标签: associations cakephp-3.0 behavior