数据库对于数据的保存
数据库第一二三范式到底在说什么
https://zhuanlan.zhihu.com/p/20028672
数据库的操作独立于 query builder 和 ORM 的存在
ORM 的操作是在操作内存对象 是独立的
ORM 的一个对象自带了操作 relationship 的方法
query builder 的操作是在模拟 SQL 句子,它自带了很多 SQL 句子模板
query builder 的操作可以做到 SQL join 1
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.
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://ruby-china.github.io/rails-guides/active_record_basic...
Active Record
在大多数情况下,Active Record 使你无需使用 SQL
(因为 stdClass 对象本身就是通过执行 SQL 得到一行、放在程序内存中,赋予一个变量 $post )
https://ruby-china.github.io/rails-guides/active_record_query...
Eloquent 和模型对象
https://laravel.com/docs/master/eloquent
Eloquent (操作模型对象) 可以打通都到 query builder
relationships also serve as powerful query builders
https://laravel.com/docs/master/eloquent-relationships#defini...
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/master/queries
Eloquent (操作模型对象) eager loading
load
with
关于 eager loading 好像是两次查询
https://laravel.com/docs/master/eloquent-relationships#eager-...
https://github.com/alexeymezenin/laravel-best-practices/blob/master/chinese.md#不要在模板中查询-尽量使用惰性加载
https://lvwenhan.com/laravel/423.html with 关系预载入 / 惰性加载 / eager loading
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。