最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

thinkphp5中关联模型的定义与使用方法

来源:动视网 责编:小采 时间:2020-11-03 13:37:46
文档

thinkphp5中关联模型的定义与使用方法

thinkphp5中关联模型的定义与使用方法:定义一对一关联这里假设你已经把thinkphp5的环境都配置好了,数据库也连接OK了。想通过模型把两张表关联起来然后在通过控制器一调用就可以得到两张表的信息。现在我准备了两张表,一张管理员表pwn_admin一张管理员信息表pwn_admin_message 为了能更
推荐度:
导读thinkphp5中关联模型的定义与使用方法:定义一对一关联这里假设你已经把thinkphp5的环境都配置好了,数据库也连接OK了。想通过模型把两张表关联起来然后在通过控制器一调用就可以得到两张表的信息。现在我准备了两张表,一张管理员表pwn_admin一张管理员信息表pwn_admin_message 为了能更


还是以上面两张表为例,但是为了配合一对多关联 pwn_admin_message 的内容还有aid 字段需要稍微修改一下。改成一个管理员有多个手机号,有多个email邮箱。

为了方便理解我把两张表的数据内容截图上来。

下图是 pwn_admin_message 表的内容:

下图是 pwn_admin 表的内容:

有几个管理员没有数据,不过没关系足够测试就可以了。好了废话不多说,开始进入正题。
相信大家一看就知道下面这个是admin模型的内容,对应的是pwd_admin 表

 <?php
namespace appindexmodel;

use thinkModel;
class Admin extends Model{

 public function AdminMessage(){
 //pid为外键id是adminmessage表关联admin表的外键
 //id是 admin表的主键
 return $this->hasMany('AdminMessage','aid','id');
 }
}

而这下面这个是 AdminMessage 对应的是哪张表我就不说了。这和一对一关联一样也可以是个空模型

<?php
namespace appindexmodel;
use thinkModel;

class AdminMessage extends Model{
 /* 
 function Admin(){
 return $this->belongsTo('Admin','aid','id');
 }
 */
}
?>

控制器调用,这回就有点不一样了。因为返回的数据是一个二维数组里面包含了多个对象所以需要把数组循环出来并把对象在转为数组才能输出

<?php
namespace appindexcontroller;
use thinkController;
use appindexmodelAdmin;

class index extends Controller
{
 /**
 * @param string $name
 */
 public function index($name='name')
 {
 $admin= Admin::get(1);
 //查找出 pwn_admin_message 表关联aid为1是所有数据
 $admin= $admin->AdminMessage()->select();
 for($i=0;$i<count($admin);$i++){
 var_dump($admin[$i]->toArray());
 }
 }
}
?>

输出结果:

还有两个函数也顺便说一下了,一个是 hasWhere 还有一个 has 这两个都是根据关联条件来查询的,通俗点讲就是根据关联到 pwd_admin 表,的 pwn_admin_message 表字段的条件来查询的。如果换过来用pwd_admin里的字段作为条件查询的话就会报错。

<?php
namespace appindexcontroller;
use thinkController;
use appindexmodelAdmin;

class index extends Controller
{
 /**
 * @param string $name
 */
 public function index($name='name')
 {
 // $admin= Admin::get(1);
 $list= Admin::hasWhere('AdminMessage',['aid'=>1])->select();
 $list1=Admin::has('AdminMessage',['aid'=>2])->select();
 var_dump($list1[0]->toArray());
 }
 }

 ?>

这样子关联得出的结果是正常的:

如果按 pwd_admin 表的字段做为搜索条件就会报错。比如我用一个 pwn_admin_message 没有的字段,用user字段来做为条件查询试试。

<?php
namespace appindexcontroller;
use thinkController;
use appindexmodelAdmin;

class index extends Controller
{
 /**
 * @param string $name
 */
 public function index($name='name')
 {
 // $admin= Admin::get(1);
 // $list= Admin::hasWhere('AdminMessage',['aid'=>1])->select();
 $list1=Admin::has('AdminMessage',['user'=>'jiehechen123'])->select();
 var_dump($list1[0]->toArray());
 }
 }
 ?>

就会报出如下错误:

推荐教程:thinkphp教程

文档

thinkphp5中关联模型的定义与使用方法

thinkphp5中关联模型的定义与使用方法:定义一对一关联这里假设你已经把thinkphp5的环境都配置好了,数据库也连接OK了。想通过模型把两张表关联起来然后在通过控制器一调用就可以得到两张表的信息。现在我准备了两张表,一张管理员表pwn_admin一张管理员信息表pwn_admin_message 为了能更
推荐度:
标签: 中的 的方法 定义
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top