最近在学习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 学习笔记的更多相关文章

  1. ORM学习笔记

    19周 11章 django ORM基本创建类型以及生成数据库结构 类型: dbfirst :通过数据库创建类 codefirst:先创建类 再创建数据库 --最常用 ORM的意思: 通过类创建数据库 ...

  2. Django模型层ORM学习笔记

    一. 铺垫 1. 连接Django自带数据库sqlite3 之前提到过Django自带一个叫做sqlite3的小型数据库,当我们做本地测试时,可以直接在sqlite3上测试.不过该数据库是小型的,在有 ...

  3. Eloquent ORM 之关联查询

    小伙伴们好,本文是在我的前一篇随笔的基础上完成的,还没有浏览的同学,请移尊驾哦 Eloquent ORM学习笔记. 前一篇文章用到了leftJoin方法,其实Eloquent对于模块之间的关联查询有自 ...

  4. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  5. SQLAlchemy 学习笔记(二):ORM

    照例先看层次图 一.声明映射关系 使用 ORM 时,我们首先需要定义要操作的表(通过 Table),然后再定义该表对应的 Python class,并声明两者之间的映射关系(通过 Mapper). 方 ...

  6. JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架

    1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...

  7. Eloquent ORM笔记

    基本操作 新增 $user = new User; $user->name = 'John'; $user->save(); $insertedId = $user->id;//从对 ...

  8. laravel5.5源码笔记(八、Eloquent ORM)

    上一篇写到Eloquent ORM的基类Builder类,这次就来看一下这些方便的ORM方法是如何转换成sql语句运行的. 首先还是进入\vendor\laravel\framework\src\Il ...

  9. 慕客网laravel学习笔记

    session中set方法使用 Session::set('user.username.age','18')嵌套使用得出$user = ['username'=>['age'=>18]]; ...

随机推荐

  1. Android Support Library package简介

    转自http://my.oschina.net/chengliqun/blog/148451 N久未做android了,以前做的时候,2.2才刚出来,现在android都更新到了4.3了,而从前一段时 ...

  2. 使用BufferedReader的时候出现的问题

    今天在使用BufferedReader的时候,出现了一个奇怪的问题 有时候换行的时候,行首会少一个字符 开始的代码是这样写的 while( br.read()!=-1 ){ String str = ...

  3. Linux中重命名文件

    linux下重命名文件有两种方式: 1.较简单的处理命令:mv mv 原文件名 新文件名 如:mv myFile newName 将MyFile重命名为newName. 2.linux提供了一个重命名 ...

  4. bwlabel函数的c++实现

    实验中需要用到区域联通的算法,就是类似于matlab中bwlabel的函数.网上找了找c++源码未果,bwlabel-python版用python描述了matlab中的实现方法,但是最后对标签的处理部 ...

  5. 在O(1)时间内删除单链表结点

    // 在O(1)时间内删除单链表结点 /* 思考: 很显然链表是一个节点地址不连续的存储结构 删除节点一般很容易会想到是修改p节点的前一个节点的next为p->next 然而除非是双向链表,否则 ...

  6. c、c++知识点

    一. (1)在linux下类似uint8_t这样的文件定义在头文件<stdint.h>里面   (2)截取了stdint.h头文件里的一些常用部分 二.c++中c_str()用法 函数返回 ...

  7. paip.输入法编程---智能动态上屏码儿长调整--.txt

    paip.输入法编程---智能动态上屏码儿长调整--.txt 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csd ...

  8. mips平台使用jdbc操作sqlite的最终解决方案

    1.概述: 本项目需要在多平台上(mips必须支持)操作嵌入式数据库sqlite,而最新的sqlite-jdbc-3.15.1.jar的本地驱动只含有少量的平台,于是解决支持mips平台实在必行.方法 ...

  9. 【转】第一个MiniGUI程序:模仿QQ界面

    最近几天在学MiniGui,最好的学习方法就是实践,先写个练练笔.其实只是一个界面,不知道什么时候才能真正写个完整的程序.初次写GUI程序,感觉写得不好,还请高手来指教. //============ ...

  10. 【转】Linux系统调用列表

    一.进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtablesize 进程所能打开的最 ...