数据库对于数据的保留
数据库第一二三范式到底在说什么
https://zhuanlan.zhihu.com/p/…
数据库的操作独立于 query builder 和 ORM 的存在
ORM 的操作是在操作内存对象 是独立的
ORM 的一个对象自带了操作 relationship 的办法
query builder 的操作是在模仿 SQL 句子,它自带了很多 SQL 句子模板
Query Builder
use Illuminate\Support\Facades\DB;
$users = DB::table('users')->get();
$user = DB::table('users')->where('name', 'John')->first();
The get method returns an Illuminate\Support\Collection instance containing the results of the query where each result is an instance of the PHP stdClass object.
The first method will return a single stdClass object.
1
Query Builder 能够做什么
通过执行 SQL 失去各种各样的 stdClass 对象或 stdClass 对象的汇合
通过执行 SQL 失去一行(的所有列)
通过执行 SQL 失去一行的某些列
Query Builder 不能够做什么
操作 relationship
模型
框架从数据库获得的一个条目并
创立一个对象,比方一个 Post 类的实例 (App\Models\Flag::Illuminate\Database\Eloquent\Model),存在于程序内存中
数据库条目 -> 内存对象的映射是由 ORM (Object Relational Mapping) 实现的。之后在内存之中的所有操作都在操作对象,在对象固化的时候会 保留或更新 一个数据库条目。
一个模型对象是相似充血模型: 充血的 model 层
一个模型对象如同是对于 stdClass 对象的封装并为之赋予了操作 relationship 的能力,通过泛滥模型办法。这种设计模式叫做 ActiveRecord
ActiveRecord is an ORM. It’s a layer of Ruby code that runs between your database and your logic code. 它有什么
https://stackoverflow.com/que…
https://ruby-china.github.io/…
Active Record
在大多数状况下,Active Record 使你无需应用 SQL
(因为 stdClass 对象自身就是通过执行 SQL 失去一行、放在程序内存中,赋予一个变量 $post)
https://ruby-china.github.io/…
Eloquent 和模型对象
https://laravel.com/docs/mast…
Eloquent (操作模型对象) 能够买通都到 query builder
relationships also serve as powerful query builders
https://laravel.com/docs/mast…
Query builder
在应用 SQL 的时候能够用 laravel query builder (它不属于 ORM / larave eloquent / ror ActiveRecord)
query builder 是 code 和 sql 之间薄薄一层,这里不波及模型对象
$price = DB::table('orders')
->where('finalized', 1)
->avg('price');
$users = DB::table('users')
->where('votes', '>', 100)
->orWhere(function(Builder $query) {$query->where('name', 'Abigail')
->where('votes', '>', 50);
})
->get();
https://laravel.com/docs/mast…
Eloquent (操作模型对象) eager loading
1
load
with
对于 eager loading 如同是两次查问
https://laravel.com/docs/mast…