多态一对一关联

    具体示例代码可以看imi-demo项目,下面仅为简单展示。

    具体示例代码可以看imi-demo项目,下面仅为简单展示。

    具体示例代码可以看imi-demo项目,下面仅为简单展示。

    @PolymorphicToOne@JoinTo@AutoInsert@AutoSave

    如 imi-demo 中代码所示,定义了一个$avatar属性,这个属性关联Avatar模型。

    UseridAvatarrelation_id关联,并且type1的才关联。

    1. /**
    2. * User
    3. * @Entity
    4. * @Table(name="tb_user", id={"id"})
    5. * @property int $id
    6. * @property string $username
    7. * @property \ImiDemo\HttpDemo\MainServer\Model\UserEx $ex
    8. * @property \Imi\Util\ArrayList $userRole
    9. * @property \Imi\Util\ArrayList $role
    10. * @property \ImiDemo\HttpDemo\MainServer\Model\Avatar $avatar
    11. class User extends Model
    12. {
    13. * 头像
    14. *
    15. * @PolymorphicOneToOne(model=ImiDemo\HttpDemo\MainServer\Model\Avatar::class, type="type", typeValue=1)
    16. * @JoinTo("relation_id")
    17. * @AutoSave
    18. * @AutoDelete
    19. *
    20. * @var \ImiDemo\HttpDemo\MainServer\Model\Avatar
    21. */
    22. protected $avatar;
    23. /**
    24. * Get 头像
    25. *
    26. * @return \ImiDemo\HttpDemo\MainServer\Model\Avatar
    27. */
    28. public function getAvatar()
    29. {
    30. return $this->avatar;
    31. }
    32. * Set 头像
    33. * @param \ImiDemo\HttpDemo\MainServer\Model\Avatar $avatar 头像
    34. *
    35. * @return self
    36. */
    37. public function setAvatar(\ImiDemo\HttpDemo\MainServer\Model\Avatar $avatar)
    38. {
    39. $this->avatar = $avatar;
    40. return $this;
    41. }
    42. }

    Avatar 模型中,$user$team是指定类型的关联,只能取到对应模型的数据。

    $relationModel会根据当前模型的type值,查询出对应模型的数据,类型不固定。

    查询

    智能类型查询

    1. $avatar = Avatar::find(1);
    2. $avatar->queryRelations('relationModel');
    3. $user = $avatar->relationModel;

    指定类型查询

    同时查询多个

    1. $avatar = Avatar::find(1);
    2. $avatar->queryRelations('user', 'relationModel');
    3. $user2 = $avatar->relationModel;