tfdaoOneToOne对象使用技巧

发表于 2025-07-11 18:43:09
阅读 7

介绍

介绍

适用于一对一的表结构设计,通常是一张主表以及一个或多个关联主表的副表这样的设计,所有副表都关联主表,主表使用自增列作为主键或者约束列作为主键。

通过tfdaoOneToOne对象操作一对一的表结构的数据的时候有几点需要注意:

1、要保证主表和所有副表除了关联键字段之外不能有重名字段,因为无法为它们设置不同的值。

使用

准备

添加tfdaoOneToOne规则

$this->setDAOOneToOne("fullUser", ["user", "userDetail"], [
    ["array"=>["userId"=>"userId"]]
]);

初始化一个tfdaoOneToOne对象

$tFullUser = (new user($this->tfphp))->getSG("fullUser");

插入数据

首先对主表进行insert操作,接着获取主表的自增列字段的值并根据关联关系赋值给副表的关联字段,然后逐个对每个副表进行insert操作。

$ret = $tFullUser->insert([
    ...
]);
$lastInsertId = $tFullUser->getLastInsertAutoIncrementValue();

更新数据

首先根据入参对主表进行update操作,然后逐个对每个副表进行update操作,更新副表数据的条件根据关联关系组织。

$ret = $tFullUser->update(["id"=>$lastInsertId], [
    ...
]);

$ret = $tFullUser->constraintUpdate(["id"=>$lastInsertId], [
    ...
]);

$ret = $tFullUser->keyUpdate(["id"=>$lastInsertId], [
    ...
]);

删除数据

首先根据入参对主表进行delete操作,然后逐个对每个副表进行delete操作,删除副表数据的条件根据关联关系组织。

$ret = $tFullUser->delete(["id"=>$lastInsertId]);

$ret = $tFullUser->constraintDelete([$lastInsertId]);

$ret = $tFullUser->keyDelete([$lastInsertId]);

查询单行数据

首先根据入参对主表进行select操作,然后逐个对每个副表进行delete操作,删除副表数据的条件根据关联关系组织,最后把所有表的数据合并到一起。

$data = $tFullUser->select(["id"=>$lastInsertId]);

$data = $tFullUser->constraintSelect([$lastInsertId]);

$data = $tFullUser->keySelect([$lastInsertId]);

查询多行数据

查询顺序是一样的,先查主表、再查副表,而不是通过join语句实现。好处是再多的数据都不会导致数据库繁忙,坏处就是查询出来的数据量过大的时候会执行时间比较长。

$data = $tFullUser->selectMany(["id"=>$lastInsertId], 0, 10);

$data = $tFullUser->constraintSelectMany([$lastInsertId], 0, 10);

$data = $tFullUser->keySelectMany([$lastInsertId], 0, 10);

查询全部数据

查询顺序是一样的,先查主表、再查副表,而不是通过join语句实现。好处是再多的数据都不会导致数据库繁忙,坏处就是查询出来的数据量过大的时候会执行时间比较长。

$data = $tFullUser->selectAll(["id"=>$lastInsertId]);

$data = $tFullUser->constraintSelectAll([$lastInsertId]);

$data = $tFullUser->keySelectAll([$lastInsertId]);

待续。。。