Eloquent ORM 学习笔记

时间:2023-12-15 10:00:56

  最近在学习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();
}

  

  下面是查询结果:

  Eloquent ORM 学习笔记

  ok ,以上只是对查询做了一个简单的例子,还有很多需要研究,比如模块之间的关联等等。