当前位置: 首页 > news >正文

ORM::联表查询

按顺序来一步一步走:

第一先建立好数据库:我的数据库是mysql数据库,数据库共分为以下几个表:

users  用户表(刚开始的时候我用的是user表名,由于kohana有喜欢建立model时在后面加复数的习惯,但是估计 user这个名字已经被占用了,指定$_table_name="user"也不行)

posts 帖子

数据库导出代码如下:

-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2014 年 05 月 16 日 12:28
-- 服务器版本: 5.5.37
-- PHP 版本: 5.3.10-1ubuntu3.11

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- 数据库: `esystem`
--

-- --------------------------------------------------------

--
-- 表的结构 `posts`
--

CREATE TABLE IF NOT EXISTS `posts` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `label_id` int(10) unsigned NOT NULL,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ;

--
-- 转存表中的数据 `posts`
--

INSERT INTO `posts` (`id`, `user_id`, `label_id`, `title`, `content`) VALUES
(1, 1, 1, 'this is first title', 'this is first content'),
(2, 1, 2, 'this is 2nd title', 'this is 2nd content'),
(19, 4, 1, 'asdfas', 'dasb');

-- --------------------------------------------------------

--
-- 表的结构 `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `u_name` char(20) DEFAULT NULL,
  `password` char(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=gbk AUTO_INCREMENT=4 ;

--
-- 转存表中的数据 `users`
--

INSERT INTO `users` (`id`, `u_name`, `password`) VALUES
(1, 'root', '123456'),
(2, '小王', '123456'),
(3, 'lzj', '1111');
View Code

 用户与帖子是一对多的关系,所有 用户 has many 帖子:

故:

<?php
class Model_User extends ORM {
    protected $_has_many = array (
            'Post' => array (
                    'model' => 'Post',
                    'foreign_key' => 'id' 
            ) ,
        );
}
View Code
<?php
class Model_Post extends ORM {
    protected $_belongs_to = array (
            'User' => array (
                    'model' => 'User',
                    'foreign_key' => 'user_id' 
            ),
            'Lable' => array (
                    'model' => 'Lable',
                    'foreign_key' => 'label_id' 
            ) 
    );
    protected $_has_many = array (
            'Comment' => array (
                    'model' => 'Comment',
                    'foreign_key' => 'id' 
            )
    );
}
View Code

用法:

$post=ORM::factory("Post")->with("User")->find_all();

该用法是利用 Post下的$_belongs_to属性寻找User对象。

 

如何实现 select id as pid from posts;

ORM::factory("Post")->select(array('id','pid'))->find_all();

 

ERROR:

经查证 : ORM 下的$_has_many中foreign_key的值应该是相关联表的字段名称。

       ORM 下的 $_belongs_to中的foreign_key的值应该是相关联表对应自身表字段名称。

     举个例子:

      一个帖子 有 多个评论发言

      一个帖子  -------------他没有外键。他的id被人拿去做外键了。

      评论的外键 就是 post_id了。 所以他们两表关联起来   foreign_key应该是相同的。

 

转载于:https://www.cnblogs.com/canbefree/p/3731952.html

相关文章:

  • Flume学习之路 (二)Flume的Source类型
  • 【struts2】Struts2的系统架构
  • STM32中用 stop 模式 配合低功耗模式下的自动唤醒(AWU) 能否实现FreeRTOS tickless 模式...
  • ECMAScript中所有的函数的参数都是按值传递的
  • 《快学 Go 语言》第 3 课 —— 分支与循环
  • spark中的动态executor分配
  • zeroclipboard无法正常使用的解决办法
  • Sublime Text 2 安装Package Control和插件的两种方法
  • SpringBoot整合RabbitMQ之典型应用场景实战一
  • MetaMask/provider-engine-3-test
  • Http长连接200万尝试及调优
  • 压缩图片C#算法
  • SSM框架pom.xml的配置
  • unrecognized import path golang.org/x/sync
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Java 23种设计模式 之单例模式 7种实现方式
  • js递归,无限分级树形折叠菜单
  • k个最大的数及变种小结
  • Laravel Mix运行时关于es2015报错解决方案
  • Laravel核心解读--Facades
  • Lucene解析 - 基本概念
  • magento 货币换算
  • Python socket服务器端、客户端传送信息
  • python_bomb----数据类型总结
  • spring cloud gateway 源码解析(4)跨域问题处理
  • vue 配置sass、scss全局变量
  • Vue 重置组件到初始状态
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 番外篇1:在Windows环境下安装JDK
  • 构建二叉树进行数值数组的去重及优化
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 码农张的Bug人生 - 初来乍到
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 悄悄地说一个bug
  • 十年未变!安全,谁之责?(下)
  • 我的面试准备过程--容器(更新中)
  • 小程序开发中的那些坑
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​iOS实时查看App运行日志
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (39)STM32——FLASH闪存
  • (BFS)hdoj2377-Bus Pass
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (四)图像的%2线性拉伸
  • (推荐)叮当——中文语音对话机器人
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)编辑寄语:因为爱心,所以美丽
  • (转载)虚函数剖析
  • .NET Core IdentityServer4实战-开篇介绍与规划