Laravel5.6 关联模型的操作,主要是一对一,一对多,多对多等操作.下面示例主要解析前面两个操作用法比较常用.(操作和用法TP5类似)

将关联查询使用语法hasOne、hasMany、belongsTo进行一个举例说明?
hasOne:有一个,加上主谓语应该是, A 有一个 B
hasMany:有很多, A 有很多 B
belongsTo:属于, A 属于 B demo示例:
假设Users模型和News模型存在关联关系.两表sql和假设数据如下:
users.sql sql文件
 DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` char(30) NOT NULL DEFAULT '' COMMENT '名称',
`created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'; -- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES ('', 'admin_01', '2018-11-19 10:06:17', '2018-11-19 10:06:22');
INSERT INTO `users` VALUES ('', 'admin_02', '2018-11-19 10:09:27', '2018-11-19 10:09:34');
INSERT INTO `users` VALUES ('', 'admin_03', '2018-11-19 11:36:56', '2018-11-19 11:37:00');

news.sql sql文件
 CREATE TABLE `news` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`users_id` int(10) NOT NULL DEFAULT '' COMMENT '用户表id',
`author` char(30) NOT NULL DEFAULT '' COMMENT '作者',
`content` text NOT NULL COMMENT '内容',
`created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='新闻表'; -- ----------------------------
-- Records of news
-- ----------------------------
INSERT INTO `news` VALUES ('', '', ' Ning', 'Hello World 01', '2018-11-19 10:08:04', '2018-11-19 10:07:59');
INSERT INTO `news` VALUES ('', '', 'Wang', 'Hello World 02', '2018-11-19 10:11:01', '2018-11-19 10:11:08');
INSERT INTO `news` VALUES ('', '', 'Li', 'Hello World 03', '2018-11-19 11:37:57', '2018-11-19 11:37:59');
INSERT INTO `news` VALUES ('', '', 'Hong', 'Hello World 04', '2018-11-19 15:02:26', '2018-11-19 15:02:29');
一对一:
例如:一个 Users 模型有一个与之关联的 News 模型.
Users.php Users模型
 <?php

 namespace App\Model\Eloquent\Admin;

 use Illuminate\Database\Eloquent\Model;

 class Users extends Model
{
protected $table = 'users'; /**
* 关联news表
*/
public function newsMethod()
{
//hasOne($related, $foreignKey = null, $localKey = null)
//第一个参数为对应的model, 第二个参数默认为model对应的表的外键, 第三个参数默认为当前模型对应的表的主键
return $this->hasOne('App\Model\Eloquent\Admin\News','users_id', 'id');
}
}
News.php  News模型
 <?php

 namespace App\Model\Eloquent\Admin;

 use Illuminate\Database\Eloquent\Model;

 class News extends Model
{
protected $table = 'news'; /**
* 相对关联users表
*/
public function usersMethod()
{
//belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null)
//第一个参数为model, 先讲第四个参数,默认为调用belongsTo()的方法名字, 第二个参数默认为第四个参数加上 '_id', 第三个参数默认为model的对应表的主键
return $this->belongsTo('App\Model\Eloquent\Admin\Users','users_id','id');
}
}
关联查询 -- 查询news表关联id=1,一条数据
 $data = Users::find(1)->newsMethod->toArray();
结果打印:
相对关联查询 -- 查询users表关联id=2,一条数据
 $data = News::find(2)->usersMethod->toArray();
结果打印:

 
一对多
一对多关联:是定义单个模型拥有多个其它模型的关联关系.
Users.php Users模型
 <?php

 namespace App\Model\Eloquent\Admin;

 use Illuminate\Database\Eloquent\Model;

 class Users extends Model
{
protected $table = 'users'; /**
* 关联news表 假设一对多
*/
public function newsMethodMany()
{
return $this->hasMany('App\Model\Eloquent\Home\News','users_id', 'id');
}
}

关联查询 -- 查询users和news两表关联id=3,两条数据
 $data = Users::find(3)->newsMethodMany->toArray();
结果打印:
查询存在的关联关系操作语法.
with:类似于 SQL 中的 left join   注:渴求加载查指定字段, id字段是必须列出
 $data = News::with('usersMethod:id,name')->get()->toArray();

结果打印:

 
has:类似于 SQL 中的 inner join
 $data = News::has('usersMethod')->get()->toArray();
whereHas:inner join 之后,可以补充查询条件
 $data = News::whereHas('usersMethod', function ($query) {
$query->where('author', '=', 'Hong');
})->get()->toArray();
结果打印:

laravel5.6 ORM 关联模型,一对一和一对多的更多相关文章

  1. Django 二——models(admin、ORM),一对一、一对多、多对多操作,all、values、value_list的对比

    内容概要 1.关系对象映射ORM 2.admin的配置(选修) 3.all().values().value_list()的对比 4.数据库操作(一对一.一对多.多对多) 5.HttpResponse ...

  2. ibatis配置多表关联(一对一、一对多、多对多)

    iBatis的多表关联. ibatis的表关联,和数据库语句无关,是在程序中,把若干语句的结果关联到一起.这种关联形式,虽然在大数据量时是很奢侈的行为,但是看起来很干净,用起来也很方便. 这里用表lo ...

  3. TP5一对一、一对多关联模型的使用

    文章表SQL CREATE TABLE `tp_article` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `title` varc ...

  4. ThinkPHP 5.0.7 + MySQL 构建RESTful API的小程序---02-ThinkPHP5中的orm的模型关联

    ThinkPHP5.0中的操作ORM的一对一,一对多,多对多的操作: 由以下表举例: banner表的设计 id name description delete_time update_time 1 ...

  5. Django ORM、一对一、一对多、多对多、详解

    上篇博客也提到这些知识点,可能大家还是不太清楚,这篇博客为大家详细讲解ORM中的几个知识点 1.1首先我们先看一个小案例: #_*_coding:utf-8_*_ from django.db imp ...

  6. 关于TP5的一对一、一对多同时存在的关联查询

    主表SQL(tp_member) CREATE TABLE `tp_member` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id', `us ...

  7. 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)

    在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实现.不过这里不说,做关联查询的步骤可以简单的总结为以下的几步: 1.分 ...

  8. Laravel5.1 关联模型之后操作

    之前写过关于模型关联的笔记,但是模型关联好后的一些使用没有介绍,今天补上 1 写入关联模型 1.1 使用Save方法(一对多) 我们准备了两个模型:Post和Comment. 它们的关系是一对多关系. ...

  9. ThinkPHP5中模型关联关系一对一,一对多

    TP5 返回json反斜杠前面转义了class XinDai extends Controller{ public function index(){ $res = [ ['logo'=>'/i ...

随机推荐

  1. 剑指offer--day09

    1.1 题目:栈的压入.弹出序列:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列 ...

  2. Node.js 的环境配置

    1.安装node.js 官网上面最新版本的nodejs 都是自带npm的.http://nodejs.cn/至于安装过程选择默认下载就行 2.安装淘宝镜像,也就是将国外的一些资源代理到国内. 步骤:1 ...

  3. Linux 文件创建、插入、替换

    创建文件 touch newfile.txt 插入字符串 echo "aaa" >>/newfile.txt 替换字符串 sed -i "s/aaa/ccc/ ...

  4. Python学习-第二天-字符串和常用数据结构

    Python学习-第二天-字符串和常用数据结构 字符串的基本操作 def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1 ...

  5. ML5238电池管理芯片笔记

          根据公司需要开发了以ML5238电池管理芯片+STM8S为核心的电池管理系统.由于前期对BMS系统还是了解甚少,开发起来也遇到了不少困难.再开发管理系统的同时,我也开发了管理系统的上位机, ...

  6. 广告URL

    讨厌的csdn 广告,百度搜索了一次,csdn cookie广告追了你好几年还有... 把下面的url 重定向127.0.0.1  ,只记录了百度广告,部分阿里的广告,其他还未记录 虽然也用Adblo ...

  7. P2933 [USACO09JAN]气象测量The Baric Bovine

    传送门 挺显然的 $dp$ ,然鹅一开始想的是 $dfs$ 乱剪剪枝搞了 $70$ 分... 设 $f[i][j]$ 表示切了 $i$ 次,当前切的位置为 $j$ 的最小误差 那么转移显然枚举上一个切 ...

  8. MVC一个action对应多个视图的写法

    一,如下代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...

  9. 20、前端知识点--html5和css3特性(一)

    [html5/css3]css中的flex弹性布局学习总结 https://blog.csdn.net/Umbrella_Um/article/details/99490209 用CSS/CSS3 实 ...

  10. 正则表达式RegExp对象

    3.1 正则表达式对象的创建方式 字面量的方式   var patt = /匹配规则/修饰符;     / --> 边界的意思 new关键字     var patt = new RegExp( ...