首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Zend Framework中使用多个表关系建模对象

在Zend Framework中,使用多个表关系建模对象可以通过以下方法实现:

  1. 使用Zend_Db_Table和Zend_Db_Table_Row_Abstract类来定义表关系。
  2. 在Zend_Db_Table中定义关联关系,例如:
代码语言:php
复制
class Users extends Zend_Db_Table_Abstract
{
    protected $_name = 'users';
    protected $_dependentTables = array('User_Profiles');

    protected $_referenceMap = array(
        'User_Profiles' => array(
            'columns' => 'user_id',
            'refTableClass' => 'User_Profiles',
            'refColumns' => 'user_id'
        )
    );
}

class User_Profiles extends Zend_Db_Table_Abstract
{
    protected $_name = 'user_profiles';
    protected $_referenceMap = array(
        'Users' => array(
            'columns' => 'user_id',
            'refTableClass' => 'Users',
            'refColumns' => 'user_id'
        )
    );
}
  1. 在控制器中使用Zend_Db_Table来获取关联数据:
代码语言:php
复制
$user = new Users();
$userRow = $user->fetchRow($user->select()->where('id = ?', $userId));
$userProfile = $userRow->findDependentRowset('User_Profiles');
  1. 使用Zend_Db_Table_Row_Abstract类来操作关联数据:
代码语言:php
复制
class Users extends Zend_Db_Table_Abstract
{
    protected $_name = 'users';
    protected $_dependentTables = array('User_Profiles');

    protected $_referenceMap = array(
        'User_Profiles' => array(
            'columns' => 'user_id',
            'refTableClass' => 'User_Profiles',
            'refColumns' => 'user_id'
        )
    );

    public function findUserWithProfile($userId)
    {
        $userRow = $this->fetchRow($this->select()->where('id = ?', $userId));
        $userProfile = $userRow->findDependentRowset('User_Profiles');
        return array('user' => $userRow->toArray(), 'profile' => $userProfile->toArray());
    }
}

这样,在控制器中就可以使用Users表对象的findUserWithProfile方法来获取用户和用户档案的关联数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Excel公式技巧17: 使用VLOOKUP函数多个工作查找相匹配的值(2)

我们给出了基于多个工作给定列匹配单个条件来返回值的解决方案。本文使用与之相同的示例,但是将匹配多个条件,并提供两个解决方案:一个是使用辅助列,另一个不使用辅助列。 下面是3个示例工作: ?...图4:主工作Master 解决方案1:使用辅助列 可以适当修改上篇文章给出的公式,使其可以处理这里的情形。首先在每个工作数据区域的左侧插入一个辅助列,该列的数据为连接要查找的两个列数据。...VLOOKUP函数多个工作查找相匹配的值(1)》。...解决方案2:不使用辅助列 首先定义两个名称。注意,定义名称时,将活动单元格放置工作Master的第11行。...先看看名称Arry2: =ROW(INDIRECT("1:10"))-1 由于将在三个工作执行查找的范围是从第1行到第10行,因此公式中使用了1:10。

13.9K10

Excel公式技巧16: 使用VLOOKUP函数多个工作查找相匹配的值(1)

某个工作表单元格区域中查找值时,我们通常都会使用VLOOKUP函数。但是,如果在多个工作查找值并返回第一个相匹配的值时,可以使用VLOOKUP函数吗?本文将讲解这个技术。...最简单的解决方案是每个相关的工作使用辅助列,即首先将相关的单元格值连接并放置辅助列。然而,有时候我们可能不能在工作使用辅助列,特别是要求在被查找的左侧插入列时。...因此,本文会提供一种不使用辅助列的解决方案。 下面是3个示例工作: ? 图1:工作Sheet1 ? 图2:工作Sheet2 ?...图3:工作Sheet3 示例要求从这3个工作从左至右查找,返回Colour列为“Red”对应的Amount列的值,如下图4所示。 ?...B1:D10"),3,0) 其中,Sheets是定义的名称: 名称:Sheets 引用位置:={"Sheet1","Sheet2","Sheet3"} 公式中使用的VLOOKUP函数与平常并没有什么不同

24.2K21
  • Zend FrameWorkZend_Db_Table笔记

    根据Zend_Db_Table操作数据(也就是models建立一个对应的模型) 准备条件: course数据中有cid课程号,自增,主键,cname课程名称,ccredit课程学分 models...建立Course.php编写Course类继承Zend_Db_Table 写$_name=’course’;主键$_primary=’cid’; 1.插入记录操作 要在插入一行新数据,只需要将列名..., 2); $cModel->delete($where); 4.查找数据操作 通过调用find()方法,可以使用主键值轻松地检索数据.假如你只想要查询某 一条数据,该方法将回返回一个zend_db_table_row...对象,而当你想要查询多条记录时 ,将会返回一个zend_db_table_rowset对象....Framework模块,Zend_Db_Table将它自己很好的封装到独特的domain logic下.

    1.2K30

    PHP官方框架 Zend Framework 2.1 发布

    Zend Framework (简写ZF)是由 Zend 公司支持开发的完全基于 PHP5 的开源PHP开发框架,可用于开发 Web 程序和服务,ZF采用 MVC(Model–View-Controller...) 架构模式来分离应用程序不同的部分方便程序的开发和维护。...2012年9月5日正式发布了2.0版本,简称为ZF2,该版本的主打口号则是“高性能”。目前的最新版本为 Zend Framework 2.1,是ZF2里的首个正式版本。...此外,Enrico Zimuel还研发了zftool.phar,用来给该框架提供工具支持,目前支持的功能有:     创建骨架应用程序(Skeleton application)     可以骨架应用程序里创建模块...官方网址: http://framework.zend.com/ 下载最新版本: http://framework.zend.com/downloads/latest API下载地址: http://framework.zend.com

    48410

    教你使用框架的情况下也能写出现代化 PHP 代码

    很有可能下一份工作,你并不能随心所以地选择框架开拓新项目。现实就是,很多高价值,关键业务的 PHP 工作使用现有应用。...依赖注入是一种编程技术,每个依赖项都供给它需要的对象,而不是在对象外获得所需的信息或功能。 举个例子,假设应用的类方法需要从数据库读取。为此,你需要一个数据库连接。...( FastRoute 确定请求是否合法,究竟能否被应用程序处理,然后请求处理器发送 Request 到路由配置已注册过的相应处理程序) composer require middlewares/...调度器和中间件没有它的情况下也一样运作。 那它何时才能发挥威力? 嗯,如果--实际应用程序总是如此-- HelloWorld 类具有依赖关系呢?...我们容器定义该依赖关系,然后将容器传给 RequestHandler 去解决这个问题(https://github.com/middlewares/request-handler#options).

    1.4K50

    是否需要使用依赖注入容器?

    首先,名我的观点: 一般使用「依赖注入」就够了,极少数情况需要使用「依赖注入容器」。 仅当需要管理大量依赖组件的实例时,才能真正体现「依赖注入容器」的价值(比如一个框架)。...我想明确的是,实现「依赖注入容器」时不涉及 Symfony 相关功能,所以我将使用 Zend 框架示例来说明。 这边不涉及框架之争。...我非常感谢 Zend 框架组件,事实上,Symfony 框架使用了许多 Zend 框架的组件。...Zend Framework 的邮件组件可以轻松处理邮件管理工作,通常我们会使用 PHP 内建的 Mail() 函数发送电子邮件,但这不利于扩展。...值得庆幸的是,使用 Zend 的邮件组件通过设置发送对象来修改邮件发送行为非常容易。如何使用 Gmail 帐号作为发送者创建 Zend_Mail 实例并发送一封邮件: <?

    2.2K20

    tp5.1 框架join方法用法实例分析

    分享给大家供大家参考,具体如下: JOIN方法用于根据两个或多个的列之间的关系,从这些查询数据。join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。...INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果中有至少一个匹配,则返回行 LEFT JOIN: 即使右没有匹配,也从左返回所有的行 RIGHT JOIN: 即使左没有匹配...,也从右返回所有的行 FULL JOIN: 只要其中一个存在匹配,就返回行 说明 join ( mixed join [, mixed $condition = null [, string $type...返回值 模型对象 举例 Db::table('think_artist') - alias('a') - join('work w','a.id = w.artist_id') - join('card...FrameWork框架入门教程》及《PHP模板技术总结》。

    1.5K20

    10个比较流行的PHP框架

    它具有出色的速度和性能,高度可扩展,并且允许开发人员避免编写重复的SQL语句的复杂性,因为他们可以根据对象对数据库数据建模。 Yii拥有一个核心的开发团队和专家,他们为Yii的开发做出了贡献。...Zend Framework ? Zend Framwork是一个完整的面向对象框架,它使用接口和继承等特性使其具有可扩展性。它是基于敏捷方法构建的,敏捷方法帮助您向企业客户交付高质量的应用程序。...AOP可以用于框架容器管理的所有对象使用AOP允许您在不改变实例内部的情况下控制实例对象的行为。...PHPixie关键特性包括HMVC体系结构、标准ORM(对象关系映射)、输入验证、授权功能、身份验证和缓存。 PHPixie是使用独立组件构建的。因此,您可以使用框架本身的情况下使用它。...特点: ThinkPHP实现MVC架构的同时实现了多层架构,即应用程序分成模型、视图和控制器的这三层的同时,这三层又可以继续分成多个子层。

    12.8K20

    PHP的基本规则

    Zend 或其参与Zend Framework项目的伙伴公司发行的类必须以Zend_开头并且必须按等级顺序放在Zend/目录下。...在对象的方法,声明为private或protected的,名称的首字符必须是一个单独的下划线,这是唯一的下划线方法名字的用法。声明为public的方法不以下划线开头。...常量必须通过const定义为类的成员,不鼓励使用define定义的全局常量。 A.2.7  数据库和字段 和字段的命名以命名原则定义的规范为依据。...当几个间的字段有关联时,要注意表与之间关联字段命名的统一,如forum_articles的articleid与forum_restores的articleid。...操作符连接,它的前后加上空格以提高可读性: $project = 'PHP' . ' ' . 'Zend'; 当用"."操作符连接字符串时,代码可以分成多个行,目的也是为了提高可读性。

    5.1K50

    安全漏洞公告

    安全建议:目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本: http://www.rarlabs.com 4 Zend Framework多个信息泄露和安全限制绕过漏洞...Zend Framework多个信息泄露和安全限制绕过漏洞发布时间:2014-03-24漏洞编号:BUGTRAQ ID: 66358漏洞描述:Zend Framework (ZF) 是一个开放源代码的...Zend Framework 1.12.4之前版本实现上存在多个安全漏洞,可被恶意利用绕过某些安全限制并泄露敏感信息或造成拒绝服务。 1、解析XML实体时出错,可导致本地文件泄露和拒绝服务。...安全建议:目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:http://framework.zend.com/security/advisory/ http://framework.zend.com...OpenSSH 6.6之前版本的sshd没有正确支持sshd_configAcceptEnv上的通配符,这可使远程攻击者通过通配符之前使用子串,利用此漏洞绕过目标环境限制。

    84770

    安全漏洞公告

    OAUTH及OpenID实现上存在隐蔽重定向漏洞,即攻击者受影响站点创建一个弹出式登录窗口,然后诱使用户登录,窃取个人数据,将用户重定向到攻击者控制的网站。...PHP"php_parserr()"函数(ext/standard/dns.c)的实现存在错误,恶意用户通过特制的DNS TXT记录响应,利用此漏洞可造成堆缓冲区溢出。...Symantec Web Gateway 5.2.1之前版本没有正确过滤用户输入实现上存在多个跨站脚本漏洞,攻击者可利用这些漏洞受影响站点的用户浏览器执行任意脚本代码。...Symantec Web Gateway 5.2.1之前版本没有正确过滤用户输入实现上存在多个SQL注入漏洞,攻击者可利用这些漏洞在下层数据库执行未授权数据库操作。.../ 8 Zend Framework 'Zend_Db_Select::order()' 函数SQL注入漏洞 3.8 Zend Framework 'Zend_Db_Select::order()' 函数

    1.2K70

    PHP中常用的七大框架的优点与缺点

    五、Zend Framework 优点: 1.大量应用了PHP5面向对象的新特征:接口、异常、抽象类、SPL等等。...这些东西的应用让Zend Framework具有高度的模块化和灵活性 2.严格遵循“针对接口编程”和“单一对象职责”等原则 3.官方出品,自带了非常多的library,框架本身使用了很多设计模式来编写,...功能完成比较弱,View层简单实现(跟没实现一样),无法很强大的控制前端页面. 2.没有自动化脚本,创建一个应用,包括入口文件,全部必须自己手工构建,入门成本高 3.对于简单和小型的项目来说,反而因为框架应用了大量面向对象设计...,完全足够有能力开发很强大的产品出来,所以基本可以确定的是Zend Framework前途无量,如果花费更多的时间去完善框架。...同样的,Zend Framework架构本身也是比较优雅的,说明Zend官方是有很多高手的,设计理念上比较先进,虽然有一些功能实现的不够完善,比如View层,自动化脚本等等,这些都有赖于未来的升级 六、

    3.6K40

    Zend API:深入 PHP 内核

    内存管理 Zend 已经被部分抽象,而且你也应该坚持使用这些抽象,原因显而易见:由于得以抽象,Zend 就可以完全控制内存的分配。...字符串处理 Zend 引擎,与处理诸如整数、布尔值等这些无需为其保存的值而额外申请内存的简单类型不同,如果你想从一个函数返回一个字符串,或往符号新建一个字符串变量,或做其他类似的事情,那你就必须确认是否已经使用上面的...假如你模块拼错了一些你想访问的外部函数的名字,那么它们就会在符号显示为“未能连接的符号”。这样 PHP 动态加载或连接时,它们就不会运行--二进制文件没有相应的符号。...如果想要编译成内建模块的话,那么这个 get_module() 将被移除。 get_module() 函数模块加载时被 Zend 所调用,你也可以认为是被你 PHP 脚本的 dl() 函数所调用。...数组 数组 Zend 内部是用哈希(HashTable)来存储的,这个哈希可以使用一系列的 zend_hash_*() 函数来访问。

    2.6K20

    PHP-DI中文文档(基于有道翻译,基本是直接拿过来使用,并没有润色)

    幕后,PHP-DI将创建一个Mailer对象和一个UserManager对象。) How does it know what to inject? (它怎么知道我们要注入什么对象?)...我们的示例,UserManager构造函数接受一个Mailer对象:PHP-DI知道它需要创建一个。 很基本,但很有效。)...(不要担心,PHP-DI使用了PHP的反射类 ,这是相当标准的:Laravel、Zend Framework和许多其他容器都是这样做的。...objects: (我们在上面的例子已经看到,我们可以使用容器来获取对象:) $userManager = $container->get('UserManager'); However we don't...您需要从容器获取(一个对象),但这应该是您的应用程序的入口点上尽可能少的时间。

    1.4K10

    《Entity Framework 6 Recipes》翻译系列 (1) —–第一章 开始使用实体框架之历史和框架简述「建议收藏」

    使用实体框架,我们能在设计器或是代码中直接对领域实体类进行建模。还能建立实体类之间的关系。...面对这些实体类以及他们之间的关系我们构建LINQ查询来应对,LINQ允许我们代码中使用实体类以及他们之间的关系来表达关系型数据库的概念。...使用面向实体对象编程方式代替面向高度结构化的关系型数据库开发方式,实体框架会帮你实现实体类到底层数据库的映射。 注意:我们使用的术语实体类或实体对象,是一个代表应用程序领域项的一个类。...图1-2 实体数据模型  图1-2,展示了左边的数据库不直接映射到右边的实体类型(代码中使用)的。...任何有用的应用程序都需要将对象持久化到某一数据存储系统,实体框架的数据模型定义、列,关系以及映射到底层数据库的数据类型。存储架构定义语言(SSDL)定义了存储模型的语法。

    1.4K20

    Entity Framework简介

    可以将数据作为业务对象和实体进行操作,使用LINQ进行查询,使用C#进行操作和检索。...POCO的C是指 .NET Framework公共语言运行时(Common Language Runtime,CLR)的一个简单对象。...2.Model First Model First 允许我们使用实体设计器空模型建模型实体,及其关系和继承层次结构,然后创建数据库。...优缺点如下: 无法控制实体和数据库,因为自动生成的代码难以修改,但是对于小型且简单的项目,它仍行之有效; 实体添加额外的功能,不得不修改T4模板或者使用部分类来完成; 数据库模型的更改不是最佳选择...优缺点如下: 如果已有DBA设计的数据来单独开发或已存在数据库,将作为首选 通过EDM向导为我们创建实体、关系和继承层次结构,修改映射后还可以生成实体; 要在实体添加额外的功能,必须通过T4修改模板或者使用部分类

    1.7K10

    对PHP变量的实现方式以及内存管理的梳理

    静态变量 静态变量只会在编译时初始化,保存在zend_op_array->static_variables 这个哈希 静态变量通过哈希保存,这就使得能像普通变量那样有一个固定的编号 编译时先判断...PHP对象在内存堆栈的分配 对象PHP里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?...对于我们的对象来数就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通过对象名称就可 以使用对象了。...PHP5的Zend Engine的实现,所有的值都是堆上分配空间,并且通过引用计数和垃圾收集来管理....PHP5的Zend Engine主要使用指向zval结构的指针来操作值,很多地方甚至通过zval的二级指针来操作.

    87120

    PHP的哈希实现

    数据结构及说明 PHP的哈希就是使用链表来存储哈希到同一个槽位的数据,zend为了保存数据之间的关系使用了双向链表来链接元素。...哈希结构 PHP的哈希实现在Zend/zend_hash.c,先看看PHP使用如下两个数据结构来实现哈希,HashTable结构体用于保存整个哈希需要的基本信息,而Bucket...这里保存的哈希值而不是哈希的索引值, 这是因为索引值和哈希的容量有直接关系,如果哈希扩容了,那么这些索引还得重新进行哈希进行索引映射, 这也是一种优化手段。...简单来说就是哈希的Bucket结构维护了哈希插入元素的先后顺序,哈希结构维护了整个哈希的头和尾。 操作哈希的过程始终保持预算之间的关系。...PHP不管是对数组的添加操作(zend_hash_add),还是对数组的更新操作(zend_hash_update), 其最终都是调用_zend_hash_add_or_update函数完成,这在面向对象编程相当于两个公有方法和一个公共的私有方法的结构

    1.1K20
    领券