一对一关联

比如我们有一个用户表,另外有一个个人资料表,他们之间的关联就是一对一的关系。

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

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

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

定义

一对一关联会用到的注解:

@OneToOne@JoinFrom@JoinTo@AutoSelect@AutoInsert@AutoUpdate@AutoSave@AutoDelete

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

UseridUserExuser_id关联。

允许自动查询、保存、删除时,自动处理UserEx模型数据。

  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. */
  11. class User extends Model
  12. {
  13. /**
  14. * @OneToOne("UserEx")
  15. * @JoinFrom("id")
  16. * @JoinTo("user_id")
  17. * @AutoSave(true)
  18. * @AutoDelete
  19. *
  20. * @var \ImiDemo\HttpDemo\MainServer\Model\UserEx
  21. */
  22. protected $ex;
  23. /**
  24. * Get the value of ex
  25. *
  26. * @return \ImiDemo\HttpDemo\MainServer\Model\UserEx
  27. */
  28. public function getEx()
  29. {
  30. return $this->ex;
  31. }
  32. /**
  33. * Set the value of ex
  34. *
  35. * @param \ImiDemo\HttpDemo\MainServer\Model\UserEx $ex
  36. *
  37. * @return self
  38. */
  39. public function setEx(\ImiDemo\HttpDemo\MainServer\Model\UserEx $ex)
  40. {
  41. $this->ex = $ex;
  42. return $this;
  43. }
  44. // 其它这边省略……

查询

find

  1. $model = User::find(1);
  2. var_dump($model->ex); // ex数据可以直接取到,是UserEx实例

select

  1. $list = User::select();
  2. foreach($list as $item)
  3. {
  4. var_dump($item->ex); // ex数据可以直接取到,是UserEx实例
  5. }

插入

  1. $user = User::newInstance();
  2. $user->username = 'User123';
  3. // 对UserEx实例赋值
  4. $user->ex->intro = '这个人很懒,什么也没留下';
  5. // 一句话,数据插入两张表
  6. $result = $user->insert();
  7. var_dump($result->getLastInsertId());

更新

  1. $user = User::find(1);
  2. $user->ex->intro = '这个人很懒,什么也没留下-' . date('Y-m-d H:i:s');
  3. // 更新ID为1的记录
  4. // 对User对象执行update,同时也会让UserEx做update
  5. $result = $user->update();

保存

和insert、update同理,就不作演示了。

删除

  1. $user = User::find(1);
  2. // 删除ID为1的记录,UserEx对应表也会删除这条关联记录
  3. $result = $user->delete();
  4. if($result->isSuccess())
  5. {
  6. echo 'success';
  7. }