首页
学习
活动
专区
圈层
工具
发布

orm 系列 之 Eloquent演化历程1

Eloquent Eloquent是laravel中的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...,所以讲的不错误的地方,恳请大牛们能指出,或者如果你有什么地方是没看懂的,也请指出问题来,因为可能那地方就是我自己没看懂,所以没讲明白,也请提出来,然后我们一起讨论的,让我们能共同的进步的。...先看HasOne,即OneToOne的关系,看代码 public function hasOne($related, $foreignKey = null) { $foreignKey = $foreignKey...note:以上分析的代码是:git co f6e2170 讲到这,我们列举下对象之间的关系 One-To-One User 和 Phone的1对1的关系, class User extends Model...到这,我们就分析完了eloquent在f6e2170版本上具有的功能了,到目前为止,eloquent的类图如下: 总结 目前,我们分析到的版本是f6e2170,已经具备了一个orm该需要的功能了,Connection

1.3K30

Laravel源码分析之模型关联

使用模型关联给应用开发带来的收益我认为有以下几点 主体数据和关联数据之间的关系在代码表现上更明显易懂让人一眼就能明白数据间的关系。...按照Laravel设定好的模式来写关联模型每个人都能写出高效和优雅的代码 (这点我认为适用于所有的Laravel特性)。...我们通过官方文档里的例子来看一下Laravel是怎么定义这两种关联的。 一对多 class Post extends Model { /** * 获得此博客文章的评论。...WHERE role_user.user_id = 1 远层一对多 Laravel还提供了远层一对多关联,提供了方便、简短的方式通过中间的关联来获得远层的关联。...($user->posts as $post) { // } 还记得我们上一篇文章里讲获取模型的属性时提到过的吗?

10.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    通过 Laravel 创建一个 Vue 单页面应用(三)

    如果你是 Laravel 的新手,你可以查阅在 数据库入门 上的大量文档。...以下是 getUsers 函数可能看起来像是异步从API获取用户,然后触发对组件的回调: const getUsers = (page, callback) => { const params...回调传递两个参数:一个错误和来自API调用的响应。 我们的 getUsers() 方法接受一个 page 变量,该变量最终作为查询字符串参数出现在请求中。...它实际上是这样的: { params: { page: 1 } } 下面是我们的 beforeRouteEnter 守卫如何使用 getUsers 函数获取异步数据,然后在组件上调用...当下一页或上一页在第一页和最后一页的边界处为空时,将禁用这些按钮。 代码中可能有一些冗余,但是此组件说明 vue-router了在进入路由之前用于获取数据的方法!

    6.4K10

    PHP面试题集锦

    404 : 请求失败,请求的数据在服务器上未发现。 500 : 服务器错误。一般服务器端程序执行错误。 503 : 服务器临时维护或过载。这个状态时临时性的。 WEB开发中数据提交方式有几种?...3、__call() :调用对象不存在的方法时执行此函数。 4、__get() :获取对象不存在的属性时执行此函数。 5、__set() :设置对象不存在的属性时执行此函数。...6、__isset() : 检测对象的某个属性是否存在时执行此函数。 7、__unset() :销毁对象的某个属性时执行此函数。 8、__toString() :将对象当作字符串输出时执行此函数。...用__set_state的返回值做为var_export的返回值。 14、__invoke() :将对象当作函数来使用时执行此方法,通常不推荐这样做。 laravel中服务提供者是什么?...如果只改onReceive回调中的代码,可以使用reload实现热加载。 谈一谈 PHP 开源框架 CI,ThinkPHP,Laravel 的优缺点及选型依据?

    7.5K20

    【MQ05】异常消息处理

    , PHP_EOL; // 定义接收数据的回调函数 $callback = function ($msg) { echo '死信队列接收到数据: ', $msg->body, PHP_EOL;...}; // 消费队列,获取到数据将调用 callback 回调函数 $channel->basic_consume('dead_letter_queue', '', false, true, false...关于 RabbitMQ 交换机和路由的内容,如果有不清楚的小伙伴,可以在深入地学习一下 RabbitMQ 的官方文档和示例哦。 然后,在回调函数中,我们直接调用 msg->nack() 。...QUEUE_FAILED_DRIVER=null 任务错误处理 除了上面的失败处理之外,在 Laravel 中,还可以在出现错误的时候马上去执行一个方法,就像是失败事件后的回调函数一样。...上一篇文章通过持久化和 ACK 机制解决了消息丢失的问题,这次即使是消费者出现了异常,我们也可以保证消息能够通过死信队列或者框架机制保存下来。

    39410

    Laravel 参数验证的疑与惑

    message方法,用于提供验证失败的错误提示信息。 使用自定义验证类,相对于extend方法扩展有一个很大的bug就是无法在自定义类中获取到当期的验证器对象。...像Yii2中,因为基本上所有的对象都有验证方法,所以很容易用当期类方法作为验证规则验证函数。...例如,一个验证规则如下,表示用当期类的validateMinNum对参数进行验证,那么,这样的一个功能,如何在Laravel中实现呢。...['min_num'=>'validateMinNum'] 方法1 通过自定义类实现 Laravel提供了ClosureValidationRule自定义验证类,用来添加回调函数的验证。...Laravel本身提供了ClosureValidationRule的验证规则用于处理回调函数验证规则。同时也可以使用extend方式进行回调函数的验证。

    4K00

    laravel实现支付宝支付功能

    AlipayTradeWapPayContentBuilder.php是alipay demo对支付宝手机网站支付接口业务参数的封装。...配置config(alipay.php) 在上面中alipay的demo中是有一个config.php文件作为配置文件的,这里我们不需要这个文件,我们利用laravel的特性,在laravel项目目录下的...GET形式调用,而异步路由是POST形式调用,在调用支付接口的时候会出现CSRF错误,现在最简单的方法是利用laravel的中间件避免CSRF,在app/Http/Middleware/VerifyCsrfToken.php.../vendor/laravel/lumen-framework/src/helpers.php:126) 这是因为Laravel 5使用Alipay SDK时,Laravel内带的加密解密函数Encrypt...()/Decrypt()函数和Alipay SDK中的加密解密函数Encrypt()/Decrypt()函数命名冲突 解决方法:只需修改Alipay SDK中定义的函数名称,修改引用的函数名称。

    2.9K10

    1w5000字概括ES6全部特性

    ES6缩略 修正 ES6是ECMA为JavaScript制定的第6个标准版本,相关历史可查看此章节《ES6-ECMAScript6简介》。...,垃圾回收机制会自动回收此成员所占用的内存,不考虑此成员是否还存在于WeakSet结构中 Map Map 定义:类似于对象的数据结构,成员键可以是任何类型的值 声明:const set = new Map...entries():返回以键和值为遍历器的对象 forEach():使用回调函数遍历每个成员 重点难点 遍历顺序:插入顺序 对同一个键多次赋值,后面的值将覆盖前面的值 对同一个对象的引用,被视为一个键...WeakMap结构对此成员键的引用 成员键不适合引用,它会随时消失,因此ES6规定WeakMap结构不可遍历 其他对象不再引用成员键时,垃圾回收机制会自动回收此成员所占用的内存,不考虑此成员是否还存在于...,等于没有抛出 实例状态的错误具有冒泡性质,会一直向后传递直到被捕获为止,错误总是会被下一个catch()捕获 不要在then()里定义rejected状态的回调函数(不使用其第二参数) 建议使用catch

    1.9K20

    EasyWeChat初体验

    我这里使用的是laravel,安装好后路径是这样的 ?...、分享的精神对其进行补充和完善,将各种坑一一填小、填平,让微信开发变得不那么痛苦,甚至,变成一件快乐的事…… 一些服务器基本设施问题: 时区不对, 使用命令 date 可以在服务器上查看当前时间,如果发现时区不对则需要修改时区...在开发过程中,也可以使用测试授权目录进行开发测试,此时还应该将参与测试的个人微信号添加到测试白名单中,否则将出现对应的错误提示…… 配置前请先理解页面、目录、URL 以及域名等几个基本概念,并对自己所使用的框架的路由机制有一个大致了解...如果没有正确配置 JSAPI 安全域名并且开启了调试模式,此时就报此错误。...在使用了 Xdebug 的环境下可能出现这个问题。这是由于 Xdebug 限制函数嵌套的最大层级数(默认为100),当嵌套次数达到该值便会触发 Xdebug 跳出嵌套并报此错误。

    4.2K70

    【Laravel系列6.4】管道过滤器

    = null): mixed 它的作用是将回调函数 callback 迭代地作用到 array 数组中的每一个单元中,从而将数组简化为单一的值。...接下来第二个参数是调用的一个 carry() 函数,它在 array_reduce() 方法中代表的是 callback 那个回调函数。...我们一步步的来看。 参数不用多说了吧,stack 是上一次的返回值,pipe 是当前我们要处理的值,也就是当前的中间件对象。在这个回调函数中又调用了一层回调函数,并将这两个值通过 use 传递进去。...中间件中 return next() 的东西呀,管道中的下一个回调函数。...上面的代码我们是嵌套了两层的回调函数,通过之间的学习,我们知道回调函数是有延迟加载的特性的,也就说,这一堆代码是在我们最终调用这个回调函数的时候才会触发的,那么它是在什么时候调用的呢?

    4.3K20

    Redis 分布式锁在 Laravel 任务调度底层实现中的应用

    :run,并且将标准输出和错误都重定向到空设备文件(即丢掉的意思,如果你想将输出记录下来,可以将 /dev/null 调整为对应的日志文件路径,或者你还可以为每个 Laravel 调度任务设置单独的日志输出...可以看到,Laravel 底层其实还是通过类似 Cron 条目的 Shell 命令去执行调度任务的,只不过通过 Event 对象对其进行了封装。...方法判断当前任务是否需要跳过,如果定义调度任务时通过 when 方法设置了执行条件,则会调用对应的回调函数进行判断,否则忽略: foreach ($this->schedule->dueEvents(...要实现不同服务器或者同一台服务器上同一个调度任务不能重叠运行(比如一个耗时任务需要执行半个小时,但是调度设置成了每十分钟执行一次,就会出现任务重叠运行的问题),可以通过分布式锁来实现,因为锁天生就适用于这种同一时间...可以看到,在 Laravel 底层,其实是通过面向对象的 PHP 代码对 Cron 条目 Shell 命令进行了封装,以便通过更加灵活的方式来管理和维护调度任务的运行。

    6.6K21

    Laravel框架关键技术解析

    语法 A.组件化开发语法条件 1.命名空间 PHP命名空间只支持导入类,而不支持导入函数或常量 对命名空间中的名称来说,最前面是不允许有反斜杠的 对完全限定名称的函数、类和常量可以直接解析 对所有非限定名称和非完全限定名称的函数...,先在当前命名空间下解析,如果查找不到再在全局空间下查找 在命名空间内部对非限定名称和非完全限定名称的类进行调用时,只会在当前命名空间下解析 2.文件包含 require产生错误,include出警告...3.服务容器只有一个,而服务提供者遍布整个框架的各个功能模块内 4.对于Laravel框架,当接收到一个请求时,就会为了处理这个请求首先生成一个服务容器,用于容纳处理请求需要的服务 5.回调函数绑定的就是一个回调函数...,实例对象服务绑定的是一个实例对象 6.回调函数的绑定还分为两种: 普通绑定每次生成该服务的实例对象时都会生成一个新的实例对象,也就是说在程序的生命周期中,可以同时生成很多个这种实例对象 单例绑定在生成一个实例对象后...,如果再次生成就会返回第一次生成的实例对象 7.还有一种形式,即绑定具体类名称,本质上也是绑定回调函数的方式,只是回调函数是服务容器根据提供的参数自动生成的,如:$app-bind(XXX::class

    14.4K20

    3分钟短文:Laravel 检查记录是否被软删除

    引言 laravel模型中引入了SoftDeletes这个全局作用域用于将数据库的条目 标记为删除,而实际上并不清除数据,这样可以为后续的数据恢复做铺垫。...那么好了,如果要自定义软删除字段,只用在继承类,也就是模型内编辑此常量即可: class User extends Model { use SoftDeletes; const DELETED_AT...= 'my_deleted_at'; } 如果要使用框架的格式化方法对该字段进行标准操作: protected $dates = ['my_deleted_at']; 检查条目 上一节介绍了默认的软删除使用方法...使用了软删除功能后,会在模型的查询方法上,默认追加 where deleted_at is null 那么如果使用了全量查询后,如何判断一个记录是否是已经软删除的呢?laravel提供了这些功能。...写在最后 本文通过对laravel模型中软删除的源码分析, 为大家展示了引入软删除功能,并自定义软删除标记字段的方法。通过模型提供的方法,进而判断记录是否已软删除。

    1.8K30

    Laravel的容器的工作原理

    使用Laravel有一段时间了,终于抽点了时间看了一下其laravel实现的IOC控制反转的概念,确实很有意思。 Laravel的容器虽然和docker的容器概念不同,但是都一样承载了十分重要的信息!...php //容器类装实例或提供实例的回调函数 class Container { //用于装提供实例的回调函数,真正的容器还会装实例等其他内容 //从而实现单例等高级功能 public...$bindings = []; //绑定接口和生成相应实例的回调函数 public function bind($abstract, $concrete=null, $shared=...false) { echo "binding {$abstract}\n"; //如果提供的参数不是回调函数,则产生默认的回调函数 if(!...进入build流程,跳过闭包检测,开始执行反射 // 6. 如果没有构造函数,直接实例化,如果有,解析出依赖 // 7.

    81130

    Laravel Validation 表单验证(二、验证表单请求)

    他们会自动被 Laravel 提供的 [服务容器]自动解析。. 自定义错误消息 你可以通过重写表单请求的 messages 方法来自定义错误消息。...此方法应返回属性 / 规则对及其对应错误消息的数组: /** * 获取已定义验证规则的错误消息。...此方法应返回属性 / 名称对的数组: /** * 获取验证错误的自定义属性。...ip 验证的字段必须是 IP 地址。 ipv4 验证的字段必须是 IPv4 地址。 ipv6 验证的字段必须是 IPv6 地址。 json 验证的字段必须是有效的 JSON 字符串。...这个方法可以接受一个布尔值或是一个闭包函数,当传递闭包函数时,闭包函数应该返回 true 或 false ,以表明是否需要验证此字段: use Illuminate\Validation\Rule;

    31.3K10

    【黄啊码】一篇文章带你了解php中的闭包和匿名函数

    记住,闭包和其他值一样,可以作为参数传入其他PHP函数 在匿名函数出现之前,要实现这样的功能,PHP开发者只能单独创建具名函数,然后使用名称引用这个函数: 这样做把回调的实现和使用场所隔离开了,而且使用闭包实现代码更加简洁...** ** **use关键字 ** 实际上,Laravel框架中也大量使用了闭包,最常见的比如路由定义: Route::group(['domain' => '{account}.myapp.com']...你会发现,PHP框架经常使用bindTo方法把路由URL映射到匿名回调函数上,框架会把匿名回调函数绑定到应用对象上,这样在匿名函数中就可以使用$this关键字引用重要的应用对象: class App {...第9行是重点所在,我们将路由回调绑定到了当前的App实例上。...第9行是重点所在,我们将路由回调绑定到了当前的App实例上。

    67210
    领券