Eloquent ORM 是 Laravel 的内置 ORM 功能非常强大, 而且已经独立成组建, 任何项目都可以选择使用它.
目前最新版是5.0.28, 主要版本是跟随 Laravel 更新的, 下一个版本是 5.1 LTS 版, 非常棒.
在进行集成前, 需要开启 Yaf 的 namespace, 确保 php.ini
有如下配置:
yaf.use_namespace=1
为了方便管理, 建议使用 Composer 管理扩展, 以下示例均使用 Composer.
composer.json
, 内容如下:{
"require": {
"illuminate/database": "5.0.*",
"illuminate/events": "5.0.*",
"symfony/debug": "2.6.*",
"symfony/var-dumper": "2.6.*"
}
}
然后运行 composer update
下载代码, 并在 index.php
引入 vendor
目录下的 autoload.php
速度不理想可尝试我共享的镜像 http://composer.fengqi.me.
<?php
// 程序启动时间
define('APP_START_TIME', microtime(true));
// 程序跟目录
define('ROOT_PATH', realpath(__DIR__.'/../'));
// 加载 Composer
require ROOT_PATH.'/vendor/autoload.php';
// 启动程序
$app = new Yaf\Application(ROOT_PATH."/config/application.ini");
$app->bootstrap()->run();
application.ini
增加以下内容:; database
database.driver = mysql
database.host = 127.0.0.1
database.database = yaf
database.username = root
database.password = 123456
database.port = 3306
database.charset = utf8
database.collation = utf8_unicode_ci
database.prefix = ""
这里使用 MySQL 作为示例, Eloquent 支持 MySQL, Postgres, SQL Server, SQLite.
]]>Laravel 的预加载使用方式是:
Post::with('user', 'user.extend')->orderBy('id', 'DESC')->paginate(10, array('id', 'content'));
拿到用户和扩展信息太方便了,但是问题是返回的数据太多了,站在一个强迫症的角度简直无法容忍啊。
控制返回的字段有两种方法,一个是在 model 里定义关系时指定好字段,但是不太灵活,还一种是在 ->with()
这里做文章:
Post::with(array(
'user' => function($query) { $query->select('id', 'name'); },
'user.extend' => function($query) { $query->select('birth', 'intro'); },
))->paginate(10, array('id', 'content'));
就这样。
既然可以指定字段那还可以做一些别的什么呢???