数据库对于数据的保存

数据库第一二三范式到底在说什么
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.

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/questions/38562565/what-is-the-difference-between-active-record-and-orm-in-rails

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

1

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


changsj
211 声望11 粉丝

changsj.


下一篇 »
web app 资料