多态一对一关联
具体示例代码可以看imi-demo项目,下面仅为简单展示。
具体示例代码可以看imi-demo项目,下面仅为简单展示。
具体示例代码可以看imi-demo项目,下面仅为简单展示。
、@PolymorphicToOne
、、
@JoinTo
、、
@AutoInsert
、、
@AutoSave
、
如 imi-demo 中代码所示,定义了一个$avatar
属性,这个属性关联Avatar
模型。
User
中id
与Avatar
中relation_id
关联,并且type
为1
的才关联。
/**
* User
* @Entity
* @Table(name="tb_user", id={"id"})
* @property int $id
* @property string $username
* @property \ImiDemo\HttpDemo\MainServer\Model\UserEx $ex
* @property \Imi\Util\ArrayList $userRole
* @property \Imi\Util\ArrayList $role
* @property \ImiDemo\HttpDemo\MainServer\Model\Avatar $avatar
class User extends Model
{
* 头像
*
* @PolymorphicOneToOne(model=ImiDemo\HttpDemo\MainServer\Model\Avatar::class, type="type", typeValue=1)
* @JoinTo("relation_id")
* @AutoSave
* @AutoDelete
*
* @var \ImiDemo\HttpDemo\MainServer\Model\Avatar
*/
protected $avatar;
/**
* Get 头像
*
* @return \ImiDemo\HttpDemo\MainServer\Model\Avatar
*/
public function getAvatar()
{
return $this->avatar;
}
* Set 头像
* @param \ImiDemo\HttpDemo\MainServer\Model\Avatar $avatar 头像
*
* @return self
*/
public function setAvatar(\ImiDemo\HttpDemo\MainServer\Model\Avatar $avatar)
{
$this->avatar = $avatar;
return $this;
}
}
Avatar
模型中,$user
和$team
是指定类型的关联,只能取到对应模型的数据。
$relationModel
会根据当前模型的type
值,查询出对应模型的数据,类型不固定。
查询
智能类型查询
$avatar = Avatar::find(1);
$avatar->queryRelations('relationModel');
$user = $avatar->relationModel;
指定类型查询
同时查询多个
$avatar = Avatar::find(1);
$avatar->queryRelations('user', 'relationModel');
$user2 = $avatar->relationModel;