企业管理网站模板,建筑设计院分公司加盟,wordpress 分类目录 丢失,平面广告设计培训班费用用一对多关联的前提
多的一方的数据库表有一的一方数据库表的外键。 举例#xff0c;用户获取自己的所有文章
数据表结构如下
// 用户表
useruser_id - integer // 用户主键name - varchar // 用户名称// 文章表
articlearticle_id - integer // 文章主键title - varchar …用一对多关联的前提
多的一方的数据库表有一的一方数据库表的外键。 举例用户获取自己的所有文章
数据表结构如下
// 用户表
useruser_id - integer // 用户主键name - varchar // 用户名称// 文章表
articlearticle_id - integer // 文章主键title - varchar // 文章名标题content - text // 文章内容user_id - integer // 作者 user_id
多的一方文章表存在一的一方用户表的外键 user_id 。 一对多关联定义
用户表 user 模型
?phpnamespace app\api\model;class User extends Base
{// 不是默认主键名称记得定义 pk 属性protected $pk user_id;// 获取用户详情以及用户的所有文章public static function getDetail(int $user_id){return self::get($user_id, articles);}// 一对多获取用户的文章public function articles(){// 完整写法return $this-hasMany(Article, user_id, user_id);}
}hasMany 方法参数如下 hasMany(关联模型, 关联模型外键, 当前模型主键); 除了关联模型外其它参数都是可选。
关联模型必须模型名或者模型类名关联模型外键关联模型外键默认的外键名规则是当前模型名_id当前模型主键当前模型主键一般会自动获取也可以指定传入 实例演示
shop_article 表 shop_user 表 演示1
获取 user_id 为 1 的用户详情以及用户的所有文章
用户 User 控制器
?phpnamespace app\api\controller;use app\api\model\User as UserModel;class User extends Base
{public function detail(){$user_id 1;$detail UserModel::getDetail($user_id);echo pre;var_dump($detail);echo /pre;}
}用户表 User 模型
?phpnamespace app\api\model;class User extends Base
{// 不是默认主键名称记得定义 pk 属性protected $pk user_id;// 获取用户详情以及用户的所有文章public static function getDetail(int $user_id){return self::get($user_id, articles);}// 一对多获取用户的文章public function articles(){// 完整写法return $this-hasMany(Article, user_id, user_id);}
}user 控制器 detail 方法输出
object(app\api\model\User)#41 (2) {[data]array(4) {[user_id]int(1)[name]string(5) admin[create_time]int(1688452509)[update_time]int(1688452509)}[relation]array(1) {[articles]object(think\model\Collection)#50 (1) {[items:protected]array(2) {[0]object(app\api\model\Article)#45 (2) {[data]array(6) {[article_id]int(1)[title]string(12) 测试标题[content]string(12) 测试内容[user_id]int(1)[create_time]int(1689401566)[update_time]int(1689401566)}[relation]array(0) {}}[1]object(app\api\model\Article)#46 (2) {[data]array(6) {[article_id]int(2)[title]string(13) 测试标题1[content]string(13) 测试内容1[user_id]int(1)[create_time]int(1689498967)[update_time]int(1689498967)}[relation]array(0) {}}}}}
}
单条查询输出的是 User 模型实例User 模型实例的 relation 属性关联数组保存着关联模型在该关联数组中关联方法名 articles 作为键名关联查询结果作为键值对一关联查询返回模型实例对多关联查询返回结果集对象。 使用的 SQL 如下
SELECT * FROM shop_user WHERE user_id 1 LIMIT 1SELECT * FROM shop_article WHERE user_id 1 获取当前用户的文章访问 articles关联方法名 属性即可如下
?phpnamespace app\api\controller;use app\api\model\User as UserModel;class User extends Base
{public function detail(){$user_id 1;$detail UserModel::getDetail($user_id);echo pre;var_dump($detail-articles);echo /pre;}
}输出如下
object(think\model\Collection)#50 (1) {[items:protected]array(2) {[0]object(app\api\model\Article)#45 (2) {[data]array(6) {[article_id]int(1)[title]string(12) 测试标题[content]string(12) 测试内容[user_id]int(1)[create_time]int(1689401566)[update_time]int(1689401566)}[relation]array(0) {}}[1]object(app\api\model\Article)#46 (2) {[data]array(6) {[article_id]int(2)[title]string(13) 测试标题1[content]string(13) 测试内容1[user_id]int(1)[create_time]int(1689498967)[update_time]int(1689498967)}[relation]array(0) {}}}
} 演示2
获取所有用户的用户详情以及用户的所有文章
用户 User 控制器
?phpnamespace app\api\controller;use app\api\model\User as UserModel;class User extends Base
{// 获取所有用户的用户详情以及用户的所有文章public function list(){$list UserModel::getList();echo pre;var_dump($list);echo /pre;}
}用户表 User 模型
?phpnamespace app\api\model;class User extends Base
{protected $pk user_id;// 获取所有用户的用户详情以及用户的所有文章public static function getList(){return self::with(articles)-select();}// 一对多获取用户的文章public function articles(){// 完整写法return $this-hasMany(Article, user_id, user_id);}
}user 控制器 list 方法输出
object(think\model\Collection)#44 (1) {[items:protected]array(3) {[0]object(app\api\model\User)#41 (2) {[data]array(4) {[user_id]int(1)[name]string(5) admin[create_time]int(1688452509)[update_time]int(1688452509)}[relation]array(1) {[articles]object(think\model\Collection)#52 (1) {[items:protected]array(2) {[0]object(app\api\model\Article)#47 (2) {[data]array(6) {[article_id]int(1)[title]string(12) 测试标题[content]string(12) 测试内容[user_id]int(1)[create_time]int(1689401566)[update_time]int(1689401566)}[relation]array(0) {}}[1]object(app\api\model\Article)#48 (2) {[data]array(6) {[article_id]int(2)[title]string(13) 测试标题1[content]string(13) 测试内容1[user_id]int(1)[create_time]int(1689498967)[update_time]int(1689498967)}[relation]array(0) {}}}}}}[1]object(app\api\model\User)#42 (2) {[data]array(4) {[user_id]int(2)[name]string(0) [create_time]int(1689732287)[update_time]int(1689732287)}[relation]array(1) {[articles]object(think\model\Collection)#53 (1) {[items:protected]array(0) {}}}}[2]object(app\api\model\User)#43 (2) {[data]array(4) {[user_id]int(3)[name]string(6) 测试[create_time]int(1690355199)[update_time]int(1690355199)}[relation]array(1) {[articles]object(think\model\Collection)#54 (1) {[items:protected]array(0) {}}}}}
}
多条查询返回的是 Collection结果集对象Collection 对象的 item 属性保存着所有用户模型实例每个用户模型实例的 relation 属性 关联数组属性保存着关联模型实例关联方法名 articles 作为键名结果集对象作为键值结果集对象的 items 属性索引数组保存着关联查询结果。 使用的 SQL 如下
SELECT * FROM shop_userSELECT * FROM shop_article WHERE user_id IN (1,2,3) 获取每个用户的所有文章访问 articles关联方法名 属性即可如下
?phpnamespace app\api\controller;use app\api\model\User as UserModel;class User extends Base
{public function list(){$list UserModel::getList();foreach ($list as $user) {echo pre;var_dump($user-articles);echo /pre;}}}
user 控制器 list 方法输出如下
object(think\model\Collection)#52 (1) {[items:protected]array(2) {[0]object(app\api\model\Article)#47 (2) {[data]array(6) {[article_id]int(1)[title]string(12) 测试标题[content]string(12) 测试内容[user_id]int(1)[create_time]int(1689401566)[update_time]int(1689401566)}[relation]array(0) {}}[1]object(app\api\model\Article)#48 (2) {[data]array(6) {[article_id]int(2)[title]string(13) 测试标题1[content]string(13) 测试内容1[user_id]int(1)[create_time]int(1689498967)[update_time]int(1689498967)}[relation]array(0) {}}}
}
object(think\model\Collection)#53 (1) {[items:protected]array(0) {}
}
object(think\model\Collection)#54 (1) {[items:protected]array(0) {}
} 如果觉得作者写得好请帮我点个赞谢谢。