Home >Backend Development >PHP Tutorial >Laravel的Eloquent有什么特点

Laravel的Eloquent有什么特点

WBOY
WBOYOriginal
2016-06-06 20:35:581241browse

看了官方文档,感觉eloquent这种ORM基本上所有框架都有做啊,链式调用什么的根本就不是特点啊,其它框架都封装了各种数据库操作。为什么说eloquent是laravel非常强大的地方,它有什么特点吗

回复内容:

看了官方文档,感觉eloquent这种ORM基本上所有框架都有做啊,链式调用什么的根本就不是特点啊,其它框架都封装了各种数据库操作。为什么说eloquent是laravel非常强大的地方,它有什么特点吗

简单,高效,优雅

基本特性

<code>php</code><code>User::first(); // 得到第一个 User 对象

User::find(10); // 得到 id = 10 的 User 对象

User::where('name', 'john')->first(); // 得到第一个 name = john 的 User 对象

User::where('name', 'john')->get(); // 得到 name = john 的 User 对象组

User::where('name', 'john')->get()->toArray(); // 得到 name = john 的 User 对象数组

Article::where('id', '>=', 10)->where('id', 'orderBy('updated_at', 'desc')->get(); // 得到 Article id 在 10~20 的对象组
</code>

高级特性

分页

后端代码:

<code>php</code><code>return View::make('users')->withUsers(User::paginate(20));
</code>

前端代码 users.blade.php:

<code>php</code><code><br><br><ul>
@foreach ($users as $user)
<li>
id:{{ $user->id }}
name:{{ $user->name }}
</li>
@endforeach
</ul>



{{ $users->links() }}
</code>

Laravel 会自动生成分页指示器及链接,自动维护。分页功能已经彻底完成。

模型间关系

以一对多关系举例,获得 id = 10 的用户写过的所有文章:

<code>php</code><code>class User extends Eloquent {
  protected $table = 'users';

  public function hasManyArticles()
  {
    return $this->hasMany('Article', 'user_id', 'id');
  }
}
</code>

取得:

<code>php</code><code>$userWithArticles = User::find(10)->hasManyArticles()->get();
</code>

结果:$userWithArticles 是一个标准的 User 对象,外加 $userWithArticles->hasManyArticles 的值为该用户写的所有文章的对象组。

关于更多模型间关系可以参考:深入理解 Laravel Eloquent(三)——模型间关系(关联)

比较“现代化”的这些php框架,文案都是针对原来不用框架/不用ORM的程序员写的,相对于直接拼SQL,Eloquent当然在功能上很强大,但相对与同属ActiveRecord的Propel和Mapper/Proxy模式的Doctrine,没有质的差别。

增删改查就不说了,说几个其他框架可能没有的
1.relation时的预载入
用来减少了ORM的N + 1 查询问题

2.缓存
反复执行User::find(1),sql执行一次。

3.模型观察者
使用了观察者模式,监听模型的操作。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn