使用 查询构造器 也是通过一个 DB 门面,但是,在这里我们需要通过 table() 方法指定一个表名。之后的操作就全都是针对这个指定的表名了。接下来,我们就可以通过链式调用的方式进行数据库的操作。...我们又发现了一个设计模式在 Laravel 框架中的应用,意外不意外,惊喜不惊喜! 连表查询 普通的连表查询的使用还是非常简单的,我也就不多说了,下面的代码中也有演示。...一般的连表查询,我们只需要一个外键相对应即可,但是在我的实际业务开发中,还会有遇到多个键相对应的情况,这个才是我们接下来说的重点问题。...() 的话,它也会创建一个默认的 connection() 对象,就是我们上篇文章中演示的连接不同数据的效果。...然后这个 connection() 会通过上篇文章讲过的工厂方法创建一个 MySqlConnector 对象,它会继续创建 laravel/framework/src/Illuminate/Database
通过前面几篇教程的预热,我们已经连接上数据库,创建好了数据表,填充好了数据,接下来,就是在 Laravel 应用中实现对数据库的增删改查了。...DB 门面提供的方法执行原生的 SQL 语句,DB 门面既可以用于构建查询构建器方法链,也可以用于原生语句的执行。...原生 Statement 语句 我们可以通过 DB 门面提供的 statement 方法执行原生的 SQL Statement 语句,比如创建、删除、修改数据表操作: DB::statement('drop...DB 门面提供了一个 select 语句帮助我们对数据表进行查询: $users = DB::select('select * from `users`'); 该方法返回包含所有查询结果的 stdClass...查询构建器也是基于 DB 门面的,只不过需要调用其提供的 table 方法构建一个基于指定数据表的查询构建器。
经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...如果互相喜欢,则添加双向联系人关系,插入之前校验是否存在,存在则更新type等字段,不存在则插入双向数据 我们通过这个场景能非常好的体会laravel-upsert的强大,不仅减少了代码量,也减少了sql...该查询将为每个帖子和日期创建一个新记录或增加现有的查看计数器: DB :: table ( 'stats' )-> upsert ( [ [ 'post_id' => 1 , '...Lumen 如果您使用 Lumen,则必须手动实例化查询构建器: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库的时间是int类型,不是laravel默认的时间格式,并且我们的插入时间和更新时间也不是laravel默认的字段
但是查询的返回都是一个 Collection 对象,Laravel 为集合提供了很多方便的操作方法,sortBy 就是其中一个,当然还可以用 filter 等集合操作) 12....查询对象的一个封装,所以可以用在 DB 上的原始查询方法,都可以用在继承自 Eloquent 的 model 对象上。)...用于大表大集合的 Chunk()方法 不完全与Eloquent相关,它更多是Collection 集合类提供的方法,但仍然很强大 —— 处理更大的数据集,你可以将它们分成几块。...php artisan make:model Company -mcr -m 将会创建模型的迁移(migration)文件 -c 将会创建控制器(contriller) -r 将表用这个控制器应该是一个资源控制器...在保存的时候重写 update_at 字段 你知道 - > save()方法是可以接受参数的吗? 因此,我们可以告诉它“忽略” updated_at默认填充当前时间戳的功能。
引言 我们推荐使用laravel的eloquent orm 模型操作数据库表, 因为特性更为丰富,组装更为灵活,在编程层面操作数据的来来去去非常直观。...DB门面既可以使用query builder的链式操作,也可以用于执行原生查询。举几个例子。...比如删除users表: DB::statement('drop table users'); 带参数绑定的SQL查询语句: DB::select('select * from contacts where...比如简单的: $users = DB::select('select * from users'); 该方法会返回一个标准对象的集合。...type' => $userType]); 插入新数据,其实与上述的带有占位符参数绑定的SQL查询语句类似,只是SQL语法不同而已: DB::insert('insert into contacts (
,array("1")); 获取到一个数组,数组中的每一个结果是一个StdClass对象 DB::table(),得到查询构造器对象,参数:表名 调用Builder对象的get()方法,得到数组数据 例如:$users=DB::table("article")->get(); 查询构造器是链式调用的...,还有其他方法,可以去查看文档 [laravel] 数据库的迁移 使用Artisan命令创建迁移,make:migration 名称 –create 表名 例如:php artisan make:migration...create_users_table --create=users 此命令会在database/migrations目录下面创建一个迁移文件 打开生成的迁移文件,在up方法里面进行字段的创建,这里会用到数据库的结构构造器...Schema 运行迁移命令,使用命令 php artisan migrate,会在数据库中自动创建表 ?
创建一个模型 创建模型我们可以手动,也可以通过命令行,既然是学习框架,那么我们还是通过命令行来创建一个模型类吧。使用的表依然是之前的表,不过还是改下名字吧,这回表名就叫做 m_test 。...然后,我们就通过命令行创建这个表对应的 模型 类。...不不不,非常简单,我们给 Model 类设置一个变量用于指定表名就可以了。...对于 Laravel 中标准的 Eloquent 模型类来说,每个表都应该有两个字段,一个是 updated_at ,另一个是 created_at ,分别是两个时间戳字段,用于记录数据的创建时间和修改时间...就是我们上面这条 SQL 语句的查询条件。它就是去查询 db_sex 表里面的数据,然后把获得的结果对象返回回来。至于这个 ?
然后顺着我贴出的代码,可以一路看到就是如果有read 配置,那么就会先使用 write 配置创建一个主连接,接着调用这个主连接的 setReadPdo() 方法并根据 read 配置又创建了一个从数据库连接...主对象是我们的 write 连接对象,而 read 连接对象是它的一个子对象。...但是 查询构造器 以及上层的 Eloquent ORM 都是之前讲过的面向对象式的链式生成对象之后完成数据库查询的,这其中,肯定有 SQL 语句的生成过程,这就是我们接下来要学习的内容。...其实我们在 查询构造器 那篇文章中就已经看到过 Laravel 是如何生成 SQL 语句了,还记得我们分析的那个 update() 方法吗?...在 Builder 中,get() 方法会调用一个 runSelect() 方法,这个方法里面会再调用一个 toSql() 方法,就是获得原始查询语句的方法。
/7.x/installation/7447 2.创建Laravel项目 ## 通过 Laravel 安装器 composer global require laravel/installer...## 使用composer 创建一个为laravel-demo项目 composer create-project --prefer-dist laravel/laravel laravel-demo...关联表的主键 protected $fillable = [ // 3.允许被批量操作的字段, 相当于python的一个Meta中的序列器 '...DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=laravel-test DB_USERNAME=root DB_PASSWORD...我们下期文章再见~
一、Laravel核心目录文件介绍 app:程序的核心代码和业务逻辑代码,其中的Http目录是我们业务逻辑的存放点 bootstrap:包含框架启动的和自动加载文件 config:包含所有程序中的配置文件...查询构造器 - 查询数据 get - 查询多条数据结果 DB::table("表名")->get(); DB::table("表名")->where(条件)->get(); pluck...- 查询指定字段数据 DB::table("表名")->pluck("字段名"); DB::table("表名")->where(条件)->pluck("字段名"); lists - 和 pluck...效果相同 DB::table("表名")->lists("字段名"); DB::table("表名")->lists("字段名1","字段名2"); select - 指定要查询的字段 DB:...创建Model类型,方法里面声明两个受保护属性:$table(表名)和$primaryKey(主键) <?
PDO 属性设置 来填坑了,在【Laravel系列4.2:查询构造器】https://mp.weixin.qq.com/s/vUImsLTpEtELgdCTWI6k2A中,我们说过一个问题,那就是查询构造器查询出来的结果都是...之前我们已经说过,查询构造器 最终调用的结果还是使用的 原生查询 的这几个方法,所以我们从这个 select() 方法入手。...event() 是注册一个事件,传递进去的是一个 StatmentPrepared 对象,这个对象有两个构造参数,一个是连接对象本身,一个是我们生成的 PDOSatement 对象。...事件,就是要有一个注册,然后在另外一个地方监听,当注册的对象内容发生变化的时候,可以通过监听这边的方法来对事件内容进行处理。关于 Laravel 事件的内容,我们将在后面的文章中进行详细的学习。...还记得吗,在 Model 中查询返回的结果,每条数据都会直接是这个 Model 对象,而不是 stdClass ,这一点,就真的和 JavaBean 是完全相同的概念了。
* 将范围应用于给定的 Eloquent 查询生成器 * * @param \Illuminate\Database\Eloquent\Builder $builder...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]的好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我的另一个博客 - - - Laravel...这得借助于中间表,通过前面的学习我们可能会有这样的疑惑,不是多对多才借助中间表吗?。。。。不急下面通过一个例子你就理解了 ,这里得补充一句,虽然借助了中间表,但本质上还是一对多关联。...true则查询关联对象本身 通过原生sql语句我们可以更好的理解 当最后一个参数为false时 SQL: select `tags`.*, `media_tags`....null,Eloquent允许我们为这种空对象定义一个默认的类型,这个对象类型在定义关联时指定,通过withDefault()方法(这个方法好像在前面提到过) withDefault()如果不指定值默认返回
学习主题 该demo主要涉及如下几个知识点: 创建数据库并迁移数据表 创建表单,学习Laravel的blade模板引擎 创建名为Link的模型Model 保存数据进入数据库 从数据库中获得...曾经遇到一个场景:需要给数据表test增加一个字段age但又要保留test表里数据,可以再创建一个迁移文件php artisan make:migration create_links_table --...不过有时也推荐使用它的Query Builder查询构造器,实际上就是SQL语句封装的类,性能会比较高一些,个人遇到过一个场景:使用Eloquent ORM性能有点慢,导致PHP执行过长报503 Time...laravel框架使用也仅此而已,没有那么复杂,对于我们这样的刚刚入门,了解这个流程就可以玩一玩了!!!...hash字段 根据提供数据在数据表里插入一个记录record 返回该链接给用户(1).使用Query Builder的where()方法,并传入Input::get('link')参数验证数据表里是否已经有该链接
而且,Category与Post是一对多关系One-Many:一个分类下有很多Post,一个Post只能归属于一个Category;Post与Comment是一对多关系One-Many:一篇博客Post...设计字段 按照上文提到的Category、Post、Comment和Tag之间的关系创建迁移Migration和模型Model,在项目根目录输入: php artisan make:model Category...Tag表是多对多关系,还需要一张存放两者关系的表: //多对多关系,中间表的命名laravel默认按照两张表字母排序来的,写成tag_post会找不到中间表 php artisan make:migration...10个,Post插入了5个。...可以用DB::table()->insert()批量插入,拷贝ModelFactory.php中表的字段定义放入每一个表对应Seeder,当然可以有些字段为便利也适当修改对应假数据。
up前面玩了 DB 查询,但是laravel开发基本不怎么使用db方式查询,应该有更强大的 模型 Model 介绍 Laravel 的 Eloquent ORM 提供了一个漂亮、简洁的 ActiveRecord...每个数据库表都有一个对应的「模型」用来与该表交互。你可以通过模型查询数据表中的数据,以及在数据表中插入新记录。 在开始之前,请确保在 config/database.php 中配置数据库连接。...使用的是单数形式帕斯卡命名法 ,也就是首字母大写的驼峰命名法 比如 up之前创建的 test表 Model 命名就是 Test.php 但是呢, laravel 都能 用命令创建控制器生成表跟数据填充了...和使用了 DB 取出来的数据一样的是都是一个 Collection 集合,不一样的是 DB 取出来的是数组,Model 取出来的是一个类,需要一层一层的剥开点到 attributes 我们才能看到数据...像 get 里面这一长串方法一样,我们在查询数据的时候经常会有略微复杂的查询把它们写成一个模型方法 比如说在 app/Models/Test.php 文件中写一个 getList 方法 <?
中使用MongoDB 使用Composer创建一个Laravel项目 composer create-project --prefer-dist laravel/laravel laravel-mongodb-exploer...-vvv 成功后,再安装Laravel-MongoDB扩展 composer require jenssegers/mongodb -vvv 按照扩展文档说明,我们添加一个MongoDB数据库连接 /...DB中查询MongoDB 使用了Laravel-MongoDB扩展,可以基于Eloquent与Query Builder操作MySQL一样的数据php artisan thinker/ / 查询ad_clicks...集合所有记录 DB::connection('mongodb')->table('ad_clicks')->get() 查询单个记录 DB::connection('mongodb')->collection...')->where('_id', '5cf71b34e14620598643d23b')->update(['ad_index'=>2]); 在Laravel ORM中查询MongoDB 在项目中,创建一个
四、DB类操作数据库(重点) 按照MVC 的架构,对数据的操作应该放在 Model 中完成,但如果不使用Model,我们也可以用 laravel框架提供的 DB 类操作数据库。...laravel 中 DB 类的基本用法DB::table(‘tableName’) 获取操作tableName表的实例(对象)。...语法:DB::table(‘表名’) -> insert(); 连贯操作/链式操作 案例:分别使用两个函数往数据表中插入几条记录 ?...返回值是一个集合对象, 返回值: 完成遍历取出的数据: ?...(2)取出单行数据 DB::table('member')->where('id','1')->first();//返回值是一个对象 等价于limit 1 (3)获取某个具体的值(一个字段) DB::table
集合操作 其实这个集合操作并不是模型特有的,还记得在 查询构造器 中,我们查询列表的时候,总会在最后加一个 toArray() 吗?...而另外一个 map() 函数就不用多说了,之前我们说过,Laravel 的 PDO 在默认查询构造器的情况下,走的是 PDO::FETCH_OBJ ,获得的集合结果中的每个数据都是一个 stdClass...getConnection() 会返回一个之前讲过的工厂方法创建的 Connection 对象,而 query() 方法则会根据 Connection 创建一个 QueryBuilder 对象。...而不是我们之前 查询构造器 中的 laravel/framework/src/Illuminate/Database/Query/Builder.php 对象。...但 Eloquent\Builder 的内部持有的一个query 属性依然是 Query\Builder 对象,也就是说在底层,它依然是调用的我们熟悉的那个 查询构造器 来进行工作的。
我们从软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。...ID数组的条目: Contact::destroy([1, 5, 7]); 当然了,delete方法只是链式调用的一个方法,我们通过查询构造器过滤后的数据集, 都可以调用该方法将其删除: Contact...所以引入了软删除的概念,就是在表内添加一个字段,用于标记,这一行条目是否算是删除状态。在laravel中, 这个软删除字段默认是 deleted_at。你也可以在模型中手动指定。...既然说到了模型作用域,我们不妨延伸一下,说说这个设计点,以及适用的场景。 比如说有一个查询条件在代码内到处都要用,有没有简写方法,写一次其他地方可以随意调用呢?这就是本地作用域的方法了。...如果是想软删除条目那样,默认把所有的查询都追加 自定义的查询条件,就需要我们上面说的全局作用域了。
我们在前两篇教程中分别介绍了如何连接到数据库,以及如何通过迁移文件定义表结构来创建或修改数据表,接下来,是时候在数据表里添加内容了。...填充器的运行 Laravel 提供了两种方式来运行填充器:一种是独立的填充命令,另一种是在运行迁移命令时通过指定标识选项在创建数据表时填充。...这样,我们就编写好了第一个填充器类,接下来,我们可以通过指定填充器类的方式将这条记录插入到数据库: php artisan db:seed --class=UsersTableSeeder 你还可以在...然后运行如下 Artisan 命令即可: php artisan db:seed 这样,就可以在数据表 users 中看到新填充的用户记录了: 当然,我们可以在 UsersTableSeeder 类中定义多条插入语句来一次性插入多条记录...创建模型工厂 模型工厂位于 database/factories 目录下,Laravel 自带了一个用于填充 User 模型的模型工厂 UserFactory.php: <?
领取专属 10元无门槛券
手把手带您无忧上云