Eloquent ORM 学习笔记
最近在学习Laravel,觉得ORM功能很强大,我这里只是简单探索了一点,如果有更好的笔记,还请分享。
因为重点在于Eloquent ORM,所以路由设置,控制器就不详细描述了,这里直接进入Models么模块。
1.数据库准备(Mysql)
在这里需要创建users和users_ext两张表,并初始化数据:
CREATE TABLE
IF NOT EXISTS users (
iAutoId INT (11) NOT NULL AUTO_INCREMENT,
sNmame VARCHAR (20),
iStatus TINYINT (4),
iCreateTime INT (11),
PRIMARY KEY (iAutoId)
) ENGINE = INNODB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1; INSERT INTO users (sNmame, iStatus, iCreateTime)
VALUES
('test1', 1, 1400085387),
('test2', 1, 1400085387),
('test3', 1, 1400085387),
('test4', 1, 1400085387),
('test5', 1, 1400085387),
('test6', 1, 1400085387); CREATE TABLE
IF NOT EXISTS users_ext (
iAutoId INT (11) NOT NULL AUTO_INCREMENT,
iAge DECIMAL (3, 0),
sSex TINYINT (4),
iUserID INT (11),
PRIMARY KEY (iAutoId)
) ENGINE = INNODB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1; INSERT INTO users_ext (iAge, sSex, iUserID)
VALUES
(24, 1, 1),
(109, 0, 2),
(25, 1, 3),
(20, 1, 5),
(68, 0, 4),
(48, 1, 6);
2.配置数据库
在database.php中添加数据库配置:
<?php return [ 'fetch' => PDO::FETCH_CLASS, 'default' => 'user', 'connections' => [
'user' => [
'driver' => 'mysql',
'host' => 'localhost:3306',
'database' => 'test',
'username' => 'root',
'password' => 'root',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
],
]
];
3.创建UserModel
在app\models下创建UserModel.php
<?php class UserModel extends \Eloquent {
protected $table = 'users';
protected $primaryKey = 'iAutoID';
protected $connection = 'user';
}
这样一个User模型就创建成功了,代码很简单。至于其中成员变量的含义,相信都能看得懂,依次代表的是表名称、主键、数据库连接标识(配置文件中的)。
5.使用UserModel
现在你可以在任何地方使用了。控制器,路由里面都可以用。下面就在做个简单的列子:
现在有查询语句:
SELECT
users.sNmame,
users.iCreateTime,
users_ext.iAge,
users_ext.sSex
FROM
users
LEFT JOIN users_ext ON users.iAutoId = users_ext.iUserID
WHERE
users.iStatus = 1
AND users_ext.sSex = 0
ORDER BY
users.iCreateTime
LIMIT 0,
1
这里是简单的一个查询语句,接下来就以ORM的形式实现:
public function getUsers(){ $select = 'users.sNmame,users.iCreateTime,users_ext.iAge,users_ext.sSex';
$resData = UserModel::selectRaw($select)->leftJoin('users_ext','users.iAutoId','=','users_ext.iUserID')->where('users.iStatus','=',1)->where('users_ext.sSex','=',0)->skip(0)->limit(1)->get();
var_dump($resData->toArray());
exit();
}
下面是查询结果:
ok ,以上只是对查询做了一个简单的例子,还有很多需要研究,比如模块之间的关联等等。
Eloquent ORM 学习笔记的更多相关文章
- ORM学习笔记
19周 11章 django ORM基本创建类型以及生成数据库结构 类型: dbfirst :通过数据库创建类 codefirst:先创建类 再创建数据库 --最常用 ORM的意思: 通过类创建数据库 ...
- Django模型层ORM学习笔记
一. 铺垫 1. 连接Django自带数据库sqlite3 之前提到过Django自带一个叫做sqlite3的小型数据库,当我们做本地测试时,可以直接在sqlite3上测试.不过该数据库是小型的,在有 ...
- Eloquent ORM 之关联查询
小伙伴们好,本文是在我的前一篇随笔的基础上完成的,还没有浏览的同学,请移尊驾哦 Eloquent ORM学习笔记. 前一篇文章用到了leftJoin方法,其实Eloquent对于模块之间的关联查询有自 ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- SQLAlchemy 学习笔记(二):ORM
照例先看层次图 一.声明映射关系 使用 ORM 时,我们首先需要定义要操作的表(通过 Table),然后再定义该表对应的 Python class,并声明两者之间的映射关系(通过 Mapper). 方 ...
- JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架
1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...
- Eloquent ORM笔记
基本操作 新增 $user = new User; $user->name = 'John'; $user->save(); $insertedId = $user->id;//从对 ...
- laravel5.5源码笔记(八、Eloquent ORM)
上一篇写到Eloquent ORM的基类Builder类,这次就来看一下这些方便的ORM方法是如何转换成sql语句运行的. 首先还是进入\vendor\laravel\framework\src\Il ...
- 慕客网laravel学习笔记
session中set方法使用 Session::set('user.username.age','18')嵌套使用得出$user = ['username'=>['age'=>18]]; ...
随机推荐
- DataTables在回调方法中使用api
$(document).ready(function() { $('#example').dataTable( { "initComplete": function () { va ...
- android核心分析--转
http://blog.csdn.net/column/details/androidcore.html http://simon-fu.vicp.cc/?p=999 http://www.uml.o ...
- vs 自动生成core dump文件
一直以来觉着core dump这个东西很神奇,在初步学习的时候也没有个大方向,最近项目需要记录程序崩溃时的日志信息,因此在网上寻找相关的信息,此时core dump也成为了我重点关注的东西. 说说我的 ...
- 关于java.sql.SQLRecoverableException: Closed Connection异常的解决方案(转)
在项目中碰到了一个应用异常,从表象来看应用僵死.查看Weblogic状态为Running,内存无溢出,但是出现多次线程堵塞.查看Weblogic日志,发现程序出现多次Time Out. 我们知道,We ...
- The Most Wanted Letter
The Most Wanted Letter You are given a text, which contains different english letters and punctuatio ...
- SQL省市区三级表结构
-- 表的结构 areaDROP TABLE area;CREATE TABLE area ( id int NOT NULL , areaID int NOT NULL, area va ...
- Ubuntu 16.04 LTS 正式发布:系统将持续更新5年
Canonical 刚刚正式发布了Ubuntu 16.04 LTS (Xenial Xerus),这是一个长期支持版本,官方会提供长达5年的技术支持(包括常规更新/Bug修复/安全升级),一直到202 ...
- 【转】Alsa音频编程【精华】
一.前序 这里了解一下各个参数的含义以及一些基本概念. 声音是连续模拟量,计算机将它离散化之后用数字表示,就有了以下几个名词术语. 样本长度(sample):样本是记录音频数据最基本的单位,计算机对每 ...
- TCP和UDP的区别(转)
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- python学习之路-9 socket网络编程
socket基础 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...