Laravel -- 模型】的更多相关文章

Laravel 模型事件允许你监听模型生命周期内的多个关键点,甚至可以在阻止一个模型的保存或者删除. Laravel 模型事件文档 概述了如何使用钩子将对应事件与相关的事件类型关联起来,但是本文的主旨是事件与监听器的构建与设置,并额外补充一些细节的说明. 事件概述 Eloquent 有很多事件可以让你使用钩子将它们关联起来,并且增加自定义的功能到你的模型中.该模型起始时有以下事件: retrieved creating created updating updated saving saved…
刚开始用laravel模型时,为了方便一直写静态方法,进行数据库操作. <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { public static function getList() { return self::get()->toArray(); } } 直到有朋友告诉可以不用这么写,声明一个 protected 方法,方法中用 $this.在外部使…
模型事件在 Laravel 的世界中,你对 Eloquent 大多数操作都会或多或少的触发一些模型事件,下面这篇文章主要给大家介绍了关于Laravel模型事件的实现原理,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴. 前言 Laravel的ORM模型在一些特定的情况下,会触发一系列的事件,目前支持的事件有这些:creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restor…
开始创建我们的第一个 Article 模型及其对应迁移文件了,我们在项目根目录运行如下 Artisan 命令一步到位: php artisan make:model Article -m -m 是 --migration 的缩写,告知 Artisan 在创建模型同时创建与之对应的迁移文件(我使用的是 Laradock 作为开发环境): 当然,还需要编辑默认生成的迁移文件: use Illuminate\Support\Facades\Schema; use Illuminate\Database…
 首先以App\User模型为例 1.$table属性 表名,对应数据库中的表名 2.guarded)属性 guarded表示在create()方法中不能被赋值的字段 3.$hidden属性 $hidden属性可以隐藏字段,使其不出现在数组或者json格式中. 4.$fillable 和$guarded相反设为批量添加的白名单,fillable属性都是laravel的批量赋值方法create()的,…
默认情况下,Laravel Eloquent 模型默认数据表有 created_at 和 updated_at 两个字段.当 然,我们可以做很多自定义配置,实现很多有趣的功能.下面举例说明. 1. 禁用时间戳 如果数据表没有这两个字段,保存数据时 Model::create($arrayOfValues); —— 会看到 SQL error.Laravel 在自动填充 created_at / updated_at 的时候,无法找到这两个字段. 禁用自动填充时间戳,只需要在 Eloquent M…
1.什么是ORM 对象关系映射(Object Relation Maping),这个关系就是关系数据库.因此,顾名思义,ORM的核心是我们通过操作对应来操作关系数据库. ORM的优点:  ORM提供了对象属性与表字段的映射,可以大大提高开发效率 ORM的缺点: ORM牺牲了一部分性能,同时带来了学习的成本,对于复杂的.大的数据量的查询建议由成型的使用方案,否则可能会出现性能问题,(虽然我还没有遇到),因此到底要不要用ORM是一个比较重要的考量. 2.laravel中的ORM 来源于laravel…
1. 简介 2. 创建模型 //模型文件默认创建在app目录下,也可以指定创建在某个文件夹下,如Model/Goods 1. php artisan make:model Goods 2. 这种方式会自动创建一个数据库迁移文件 php artisan make:model Goods -m 3. 模型限定 1. 模型所对应的默认表名是在模型后面加s,如果模型名称后面有s,则表名跟模型名称同名,eg: Order => orders, Goods => goods, Country =>…
1. 只有 $sku->{attribute} != $sku->getOriginal({attribute}) 不一致的时候才会触发 getDirty() 不为空的时候才触发, 而且不会比较数据类型(判断是否 dirty 使用的是 == 而不是 ===)2. 直接 app(Model::class)->where()->update() 不会触发 $sku = app(Sku::class), $sku->has_stock = 1; $sku->save() 这样…
模型: //表->posts class Post extends Model { //关联用户: public function user(){ //belongsTo,第一个参数:外键表,第二个:当前表的外键,第三个:外渐表的主键. //如果第二个是名词+id,第三个是:id.后面的两个参数可以省略: // return $this->belongsTo('App\User'); return $this->belongsTo('App\User','user_id','id');…
模型中写入: const SEX_UN = 10;//未知: const SEX_BOY = 20;//男 const SEX_GRIL = 30;//女 public function sex($ind = null) { $arr = [ self::SEX_UN => '未知', self::SEX_BOY => '男1', self::SEX_GRIL => '女', ]; if ($ind !== null) { return array_key_exists($ind, $a…
模型中有个 ->toSql() 可以打印sql语句…
多对多 多对多就相当于一个专题Topic有多个文章,但是这多个文章又属于多个专题, 而且多对都必须有一个表是他们之间的关联关系表PostTopic Post表和Topic表之间没有直接的关联,而且通过关联关系表关联的 如果说你用的是一多多来获取一个专题的文章的时候, Post模型对应的是PostTopic,但是你只能获取到文章的ID,反而又麻烦 第一个参数就是要获取的模型(Posts) 第二个参数就是把这两个模型关联起来的关联关系表(TopicPost) 第三个参数就是TopicPost表中和当…
模型文件 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model { //指定表名 protected $table = 'student'; //指定主键 protected $primaryKey = 'id'; //设置Unix 时间戳 protected $dateFormat = 'U'; //指定允许批量赋值的字段,和Model::create()添加数据一起使用…
上面这个是一个模型关联的图,其实我们很容易去理解 比如说,一对一,也就是说一个用户对应的是一个手机号. 一对多,比如说一篇文章可以有多条评论 一对多反向:如一篇文章可以有多条评论,但对应每条评论也只针对于这篇文章. 下面我就对文章下的评论举例去 我们首先来到文章模型里面,设置文章-评论(一对多)模型关联 当然相对应的评论模型里我们也要设置好评论-文章(一对多的反向)关联 下一步,那就是要处理评论提交逻辑 form表单提交过来后的处理如下 这样处理后,你填写评论内容,点击提交后,数据库里面就已经存…
hasOne 一对一 用户名-手机号hasMany 一对多   文章-评论belongTo 一对多反向 评论-文章belongsToMany    多对多 用户-角色hasManyThrough 远程一对多 国家-作者-文章moreghMany 多态关联 文章/视频-评论morephToMany 多态多对多 文章/视频-标签 创建评论模型 class Comment extends baseModel { public function post(){ return $this->belongs…
用户模型 public function show(Post $post,LogManager $log){ $post->load("comments"); //这种方式是预加载 ,如果没有这句,就是下面在模板加载的时候才进行模型查询 return view("post.show",compact('post'));} post模型 <?php namespace App\Models; use Illuminate\Database\Eloquent…
模型观察器 对模型的生命周期内的多个时间点进行监控,分别有 ~ing 和 ~ed 事件 每个监控方法接收 model 作为唯一参数 使用观察器 创建观察器文件,一个普通类,不需要继承什么 针对需要的事件,编写对应的 ~ing 或 ~ed 方法,方法接收 model 作为唯一参数 在 AppServiceProvider 中注册 // 在 boot 方法中 YourModel::observe(YourModelObserver::class); 例子:需求,话题内容添加时提取话题的摘录 exce…
1.在路由閉包打印sql 打印一段代码生产的 sql 语句,使用路由闭包做个实验 Route::get('/get-sql', function() { DB::enableQueryLog(); $data = App\Models\BusinessProduct::Enable(1)->get(); return response()->json(DB::getQueryLog()); }); 在浏览器打开:http://127.0.0.1:8000/get-sql [ { "q…
一对一hasOne(用户-手机号) 一对多has Many(文章-评论) 一对多反向belongsTo(评论-文章) 多对多belongsToMany(用户-角色) 远层一对多hasManyThrough(国家-作者-文章) 多态关联morphpMany(文章/视频-评论) 多态多对多morphToMany(文章/视频-标签)…
1.Model::find($id);//查找主键为$id的数据 2.Model::find([$key1,$key2]);//使用双主键进行查找 3.Model::findOrFail($id);//查找主键为$id的数据,找不到抛出异常 4.Model::where('id',$id)->first();//获取id为$id的第一条数据 5.Model::where('id',$id)->get();//获取id为$id的数据 6.Model::where('id',$id)->ex…
看laravel模型中的这段代码, public function getLimitUsersAttribute() { return $this->user_limit - $this->user_count; } 但是模型中确没有定义, 那么user_limit和user_count属性,是从哪里来的?laravel本身一种机制,可以直接在模型当中调用数据库里字段,这个属性就是Lesson模型对应的lession表里的2个字段 使用一下看看,控制器是这样来使用 方法在看一看 那么这样输出的…
Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特点.以下是本人一点粗浅的认识,不敢奢求他人同意,更不能一一而足,仅为自己做一点总结而已. 一. 请求周期 Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件. 注册类文件自动加载器:Laravel通过composer进行依赖管理,并在bootstrap/autoload.php中注册了Composer Auto Loader (PSR-4),应用中类的命名空间将被映射到…
在使用laravel eloquent进行数据库操作的时候惊讶的发现这货居然不支持批量添加,看到网上很多人在循环里进行数据库插入操作来实现批量添加,我想说这样做是很损失性能滴!好在框架的DB门面里的insert方法可以进行批量插入.代码如下: $data= [ ['name'=>'111'], ['name'=>'222'], ]; DB::table('xxx')->insert($data); 但这样有个问题就是表名每次都要手动来输入.而我们一般情况下是在模型中进行数据库操作,并且会…
学习了下laravel5.6框架,果然很优雅,比如ActiveJieSuan model中作如下关联:(laravel模型关联关系可以查看https://laravelacademy.org/post/8867.html) 只需在ActiveJieSuan 模型中设定 protected $with = ['user','actice']; 那么查询ActiveJieSuan就能自动关联上users,actice_contents表. 如果要限定关联查询的字段,可以如下写法: ActiveJie…
前言 一.基础 Ref: Build a REST API with Laravel API resources Goto: [Node.js] 08 - Web Server and REST API 二.资源 Goto: Laravel 5.4 From Scratch[原讲座] Goto: https://laravel.com/docs/5.4 Ref: Laravel China 社区 三.快捷键 [1] 自动生成 html 基本的 head, body 代码模板. [2] exten…
1.Laravel 5.1 中的异常处理器和HTTP异常处理实例教程 http://laravelacademy.org/post/1867.html 2.laravel 集成sentry,sentry通知用slack https://api.slack.com/incoming-webhooks#getting-started 3.Laravel 模型事件入门 https://laravel-china.org/topics/9037/an-introduction-to-the-larave…
今晚……不对,是昨晚,折腾一个的小项目,发现自动填充的中文数据显示起来总不太美观,于是开始琢磨如何填充中文数据进行测试. 然而一番搜索后惊奇的发现,官方.以及一些非官方的文档均未提及这一功能.期间看到一篇他人的“经验”文章,虽然可以实现这一需求,却要求修改 vendor 目录下 fzaninotto/Faker 包的源码,对于一个中了 Laravel 的“优雅之毒”的人来说,怎能容忍如此风骚的操作? 一定有更好的办法…… 继续理清 Laravel 模型工厂原理之后,终于有所进展.发现其实只需要一…
之前写过关于模型关联的笔记,但是模型关联好后的一些使用没有介绍,今天补上 1 写入关联模型 1.1 使用Save方法(一对多) 我们准备了两个模型:Post和Comment. 它们的关系是一对多关系.现在我们要创建新的Comment到Post: public function getIndex() { // 创建一个comment模型 $comment = new Comment(['title'=> 'comment1', 'content'=> 'content1']); // 取到pos…
一般情况下laravel模型层查询出来的数据是stdClass对象,无法直接当做数组进行视图展示,所以需要转换为数组格式. Model中查到的数据为  $data  ,对它进行转化,转化为数组. 第一种方法:利用foreach循环遍历手动自定义转换为数组(数组名及主键自拟) $data = $admin->getOne($id); foreach ($data as $v) { $data1['u_id']=$v->u_id; $data1['u_username']=$v->u_use…