首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Laravel源码分析之模型关联

    按照Laravel设定好的模式来写关联模型每个人都能写出高效和优雅的代码 (这点我认为适用于所有的Laravel特性)。...\Eloquent\Relations\HasManyThrough */ public function hasManyThrough($related, $through, $firstKey =...类的实例,实例化 hasManyThrough时的操作跟实例化 BelongsToMany时做的操作非常类似。...动态属性加载关联模型 上面我们定义了三种使用频次比较高的模型关联,下面我们再来看一下在使用它们时关联模型时如何加载出来的。...author为key的数据, 类似下面 $relations = [ 'author' => Collection(Author)//Author Model组成的集合 ]; 这样再使用动态属性引用已经预加载关联模型时就会直接从这里取出数据而不用再去做数据库查询了

    9.6K10

    Laravel 软删除存在的问题

    1、软删除使用的标记类型是时间类型,通过is null条件查询,删除标记取值不支持定义 //Illuminate\Database\Eloquent\SoftDeletingScope public...builder, Model $model) { $builder->whereNull($model->getQualifiedDeletedAtColumn()); } 3、软删除trait使用之后...被关联表是一个类对象,如果应用了软删除,则会自动附加上软删除条件 6、在hasManyThrough关联关系中,如果关联表,中间表,被关联表都有软删除字段,查询关联关系,会对中间表应用删除条件。...hasManyThrough中,中间表是通过中间对象传入,可以获取到中间表是否应用软删除。...从上面可以看出,Laravel的软删除,在关联关系中会造成一些查询上条件的歧义,非常容易产生bug.而且,belongsToMany中间表的问题是无解的。

    2.3K20

    Laravel学习记录--Model

    指定连接的数据库 protected $connection ='连接名' model 添加多列数据 先在Model类定义保护属性fillable设置允许添加的字段 protected $fillable...laravel默认添加数据库时,会 增加两个字段 create_at ,update_at 如不需要这两个字段,除在迁移文件删除之外 还需在model类设置属性 public $timestamps...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]的好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我的另一个博客 - - - Laravel...,使用“.”连接即可,如我们需要获取所有书的作者以及作者的个人联系方式。...1.国家表 图片 2.用户表 图片 3.文章表 图片 通过hasManyThrough()方法建立远程一对多关联 hasManyThrough(related,through

    13.6K20

    CSS自定义属性:引入 | 使用var() | cal()计算 | css 与 js 的连接

    引入自定义属性,是一种开发者可以自主命名和使用的CSS属性。浏览器在处理像 color 、position 这样的属性时,需要接收特定的属性值,而自定义属性,在开发者赋予它属性值之前,它是没有意义的。...,gray);}复制代码作用域和级联自定义属性遵从标准的作用域和级联规则,开发者按照平时使用的习惯来就可以了!...最简单的方法是使用 :root 伪元素::root {--theme-color: gray;}复制代码这样,整个document,都可以使用--theme-color。...但当你希望不同的模块使用不同的 --theme-color 值怎么办呢?...只需要在模块的作用域中给属性重新赋值,新的颜色就会分模块生效,而不需要开发者一个个重置使用到 --theme-color 的属性。

    1.3K30

    跟我一起学Laravel-EloquentORM进阶部分

    注意的是,默认情况下之后模型的键可以通过pivot对象进行访问,如果中间表包含了额外的属性,在指定关联关系的时候,需要使用withPivot方法明确的指定列名 return $this->belongsToMany...HasManyThrough hasManyThrough( string $related, string $through, string|null $firstKey...,可以直接作为模型的属性访问,例如上面的例子,我们可以使用下面的方式访问User的Post $user = App\User::find(1); foreach ($user->posts as $post...) { // } 动态的属性都是延迟加载的,它们只有在被访问的时候才会去查询数据库,与之对应的是预加载,预加载可以使用关联查询出所有数据,减少执行sql的数量。...在子模型中使用$touches属性实现该功能 <?

    4K50

    具有嵌套关系的可重用API资源——Laravel5.5

    注:本文受到Laravel创始人Taylor Otwell介绍使用 Laravel5.5 开发API时如何替换 Fractal 的启发。 1....· 修改 .env 文件,使用 SQLite 数据库,并删除其他数据库相关的变量。· 添加或修改 DB_CONNECTION=sqlite 来指定 Laravel 使用 SQLite 作为数据库连接。...避免批量赋值是指使用 Laravel 的属性来指定哪些字段可以被批量赋值,以防止不受控制的数据注入。· 播种数据库使用 $this->attributeName 的方式访问模型中的属性,而不必每次都通过模型实例去获取属性。...这样做有利于避免 N+1 查询问题(在获取关联数据时出现的效率问题),同时可以使用单个资源类处理不同的情况。如果关联数据不可用,资源类会忽略它;反之,如果可用,资源类会将其包含在返回的数据中。

    15810

    3分钟短文:Laravel模型读数据的那个“障眼法”

    laravel模型的精巧设计使得我们操作数据层逻辑更加得心应手。 [图片] 本文我们来说说模型在读写数据中所使用的技巧。...laravel框架继承了广泛使用稳定可靠的 Carbon 类库用于操作日期时间。...访问器 其实上一节所说的日期时间的格式化,正是laravel模型访问器的功能。专门用于在模型层面,修改模型属性的展示方式。定义一个访问器非常简单,就是在模型内添加规范格式的方法函数。...使用 ->human_size 属性访问,就相当于访问了该方法。...下面是一个相对复杂的方法,根据不同情况返回字段name的值: [img] 如果在忽略列表,就使用纯小写字母,如果不是忽略列表的元素,首字母大写。最后组装为空格间隔的字符串返回。

    94111

    【PHP】Largon 快速部署 Laravel 项目

    :https://laragon.org/download/访问数据库默认数据库是 Laragon,用户名是 root,密码是 空字符串,点击「打开」按钮,就可以访问这个默认的数据库:图片进入到数据库连接界面...图片构建项目之后可以使用:http://laravel.test。...Kernel 类是在 Illuminate\Contracts\Http\Kernel的包中,我们可以通过var_dump或者下面的方式打印出实例化之后的内部对象属性,当然也可以阅读文章末尾一些不使用IDE...重点看 app 属性,app 属性实际上是一个 Illuminate\Foundation\Application 的实例,这个实例包含了非常多的属性值,挑选其中主要的内容:loadedProviders...常见问题quick.app 快速创建项目失败比较简单但是容易忽略的问题,Largon 快速构建项目实际上用的是composer,如果本地的composer --version找不到对应配置就会存在报错的情况

    3.1K20

    PHP-web框架Laravel-队列(一)

    Laravel 队列系统基于以下三个核心组件:连接器(Connection):连接器定义了如何连接到队列后端,如何将消息推入队列,以及如何从队列中拉取消息。...队列连接配置在 Laravel 中,队列连接配置存储在 config/queue.php 配置文件中。在该配置文件中,可以配置多个队列连接,每个队列连接都有一个唯一的名称,通常用于区分不同的队列后端。...sync 连接使用了同步驱动(sync driver),表示任务会同步执行,而不会放入队列中异步执行。...redis 连接使用了 Redis 驱动(redis driver),表示任务会被放入 Redis 队列中异步执行。...connection 属性表示使用哪个 Redis 连接,queue 属性表示使用哪个队列,retry_after 属性表示任务失败后的重试时间(单位秒),block_for 属性表示队列为空时阻塞多少秒

    78811

    c3p0连接池配置模板,SSM中使用c3p0连接池配置属性

    SSM使用c3p0连接池 1.1 配置c3p0.properties属性文件 1.2 Spring核心配置文件中配置applicationContext.xml 2. c3p0-config.xml 1...SSM使用c3p0连接池 1.1 配置c3p0.properties属性文件 #c3p0连接池属性文件 # 四大基本信息 c3p0.driverClass=com.mysql.jdbc.Driver #...maxPoolSize最大连接个数) 默认值:3 c3p0.acquireIncrement=5 #连接的最大空闲时间,如果超过这个时间还没有被使用,就断开这个连接(设置为0或负数,就永远都不会被断开)...# c3p0.maxStatementsPerConnection #配置连接的生存时间,超过这个时间的连接将由连接池自动断开丢弃掉。当然正在使用的连接不会马上断开,而是等待它close再断开。...-- 连接的最大空闲时间,如果超过这个时间还没有被使用,就断开这个连接(设置为0或负数,就永远都不会被断开) 单位:秒 默认值 :0 --> <property name="maxIdleTime

    84410

    laravel - 根据数据库逆向生成迁移文件

    ”这个库,但是很明显作者从2017年之后,就没有再维护过了,很显然是不适合laravel9.x去用的,所以我找到了一个可以完美平替的库 生成迁移 首先需要在config/database.php配置好数据库的连接信息...(亲测支持表前缀),然后使用composer安装库 composer require kitloong/laravel-migrations-generator 之后使用laravel的artisan就可以逆向生成迁移文件了...migrate:generate # 为指定表生成迁移 php artisan migrate:generate --tables="table1,table2,table3,table4,table5" # 忽略指定表并生成迁移...connection_name" # 生成迁移并合并成一个文件 php artisan migrate:generate --squash 完整用法 参数 详解 -c, --connection[=CONNECTION] 要使用的数据库连接...-t, --tables[=TABLES] 您希望为其生成迁移的表或视图的列表,用逗号分隔,如: users,posts,comments -i, --ignore[=IGNORE] 您希望忽略生成迁移的表或视图的列表

    1.6K50

    基于全局中间件 + Redis 实现 Laravel 全站访问计数器功能

    安装 PHP Redis 扩展 开始之前,我们先新建一个 Laravel 示例项目 redis-demo: laravel new redis-demo 要想在 Laravel/PHP 项目中使用 Redis...如果你使用的是 Laravel 官方提供的 Sail 构建 Docker 开发环境,则 PHP Redis 扩展包已经默认安装: Redis 客户端连接与配置 在 redis-demo 项目根目录下的...与服务端建立连接的配置值位于 config 属性中,其中包含了 Redis 服务器 IP(redis 容器)、端口号(6379)、密码(默认为空)和数据库信息(默认是 0)等,此外还有一个 options...属性指定额外的连接选项,cluster 表示集群,prefix 表示键名前缀,所有这些配置项都是在 config/database.php 中完成配置的: 'redis' => [ 'client...因为在建立 Redis 连接的时候,会将键名前缀设置到 Redis 的连接属性 Redis::OPT_PREFIX 上(源码位于 PhpRedisConnector 中): if (!

    2.3K20

    基于 Redis 实现 Laravel 广播功能(上):广播事件分发和底层源码探究

    这里使用的技术栈是基于 Redis 驱动的 Laravel 广播组件 + 封装了 Socket.io 服务端的 Laravel Echo Server + 封装了 Socket.io 客户端的 Laravel...Laravel 后端配置 要使用 Laravel 提供的广播组件,需要在 config/app.php 中取消 BroadcastServiceProvider 前面的注释: 'providers' =...定义广播事件类 Laravel 支持通过分发广播事件的方式来发布消息(上篇教程我们通过数组模拟了事件消息),要创建广播事件,使用如下 Artisan 命令即可: php artisan make:event...broadcastQueue 或者 queue 属性值作为队列名称,如果以上都没有设置,则只能使用默认的 default 作为队列名称了,这里我们设置了 broadcastQueue 属性,所以会被推送到...最后,就是调用队列连接(根据当前配置,默认使用的是 Redis 连接,你也可以通过在事件类中设置 connection 属性指定其他队列连接)的 pushOn 方法推送封装了当前事件的 BroadcastEvent

    3.5K20
    领券