首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel Create方法不返回观察者插入的主键值

Laravel是一种流行的PHP开发框架,它提供了许多便捷的方法和工具来简化Web应用程序的开发过程。其中,Create方法是Laravel框架中用于向数据库插入新记录的方法之一。然而,Create方法在执行插入操作后,默认情况下不会返回观察者插入的主键值。

观察者模式是一种设计模式,它允许对象在状态改变时通知和更新其他相关对象。在Laravel中,观察者可以用于在模型的创建、更新或删除操作发生时执行特定的逻辑。

当使用Laravel的Create方法插入新记录时,如果你希望获取插入的主键值,可以通过以下几种方式来实现:

  1. 使用save方法替代Create方法:Create方法是Laravel提供的一种便捷的插入记录的方法,但它不会返回插入的主键值。相反,你可以使用模型的save方法手动插入记录,并且该方法会返回插入的主键值。示例代码如下:
代码语言:txt
复制
$model = new Model();
$model->column1 = 'value1';
$model->column2 = 'value2';
$model->save(); // 手动保存记录
$primaryKey = $model->getKey(); // 获取插入的主键值
  1. 使用insertGetId方法:insertGetId方法是Laravel提供的另一种插入记录的方法,它会返回插入的主键值。示例代码如下:
代码语言:txt
复制
$primaryKey = DB::table('table_name')->insertGetId([
    'column1' => 'value1',
    'column2' => 'value2',
]); // 插入记录并获取主键值
  1. 使用观察者模式自定义逻辑:如果你希望在插入记录时执行一些特定的逻辑,并且需要获取插入的主键值,你可以自定义观察者并在观察者中处理相关逻辑。示例代码如下:

首先,创建一个观察者类,例如ModelObserver

代码语言:txt
复制
namespace App\Observers;

use App\Models\Model;

class ModelObserver
{
    public function created(Model $model)
    {
        $primaryKey = $model->getKey(); // 获取插入的主键值
        // 执行其他逻辑
    }
}

然后,在模型类中注册观察者:

代码语言:txt
复制
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Observers\ModelObserver;

class Model extends Model
{
    protected static function boot()
    {
        parent::boot();
        static::observe(ModelObserver::class); // 注册观察者
    }
}

通过以上方式,你可以在观察者的created方法中获取插入的主键值,并执行其他逻辑。

总结:Laravel的Create方法默认不返回观察者插入的主键值。如果你需要获取插入的主键值,可以使用save方法、insertGetId方法或自定义观察者来实现。具体选择哪种方式取决于你的需求和项目的架构。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Laravel5.7 Eloquent ORM快速入门详解

', 1)- max('price'); 插入/更新模型 插入 想要在数据库中插入记录,只需创建一个新模型实例,设置模型属性,然后调用 save 方法: <?...批量赋值 还可以使用 create 方法保存一个新模型。该方法返回插入模型实例。...* * @var array */ protected $fillable = ['name']; } 设置完可以被赋值属性之后,我们就可以使用 create 方法在数据库中插入一条新记录...create 方法返回保存后模型实例: $flight = App\Flight::create(['name' = 'Flight 10']); 如果你已经有了一个模型实例,可以使用 fill 方法通过数组属性来填充...定义观察者 如果你在给定模型中监听多个事件,可以使用观察者来对所有监听器分组到一个类中,观察者类拥有反射你想要监听 Eloquent 事件对应方法名,每个方法接收模型作为唯一参数。

15K41

Laravel5.2之Model Observer模型观察者

说明:本文主要学习下LaravelModel Observer模型观察者,把一点点经验分享出来希望对别人能有帮助。同时,会将开发过程中一些截图和代码黏上去,提高阅读效率。...$id]); 有Model Observer逻辑 可以注册一个模型观察者,在观察者类里做一些模型对应事件逻辑,这里就是刷掉一些缓存键值。...这里打的标签其实是:['posts', 'model'],Post::table()定义返回Model关联表名,看下Post这个Model: class Post extends Model {...,这里放在这个Post Modelboot()方法里自启动。...总结:本篇文章主要学了下LaravelModel Observer模型观察者,发现这个功能也能使代码结构更清晰,觉得挺好。最近一直在瞎研究,有遇到好玩再分享出来吧。

1.7K21

php基础(一)

用例子说明,以 Laravel 框架中控制器作为说明 ①final修饰方法不可被子类重写 ②PHP是否重写父类方法只会根据方法名是否一致判断(5.3以后重写父类方法参数个数必须一致) ③重写时访问级别只可以等于或者宽松于父类...主要防止 include,require 引用文件,把文件末尾可能回车和空格等字符引用进来,还有一些函数必须在没有任何输出之前调用,就会造成不是期望结果。PHP文件编码包含BOMUTF8....实际运用中可以redis,memcache结合,memcache可作为session存储方式,session都是KV类型键值对。...html返回给FastCGI,FastCGI返回给Nginx 进行输出。...缺点:防止xss注入 Iframe跨域 如果两个窗口一级域名相同,只是二级域名不同,document.domain设置为同一个

2.1K20

读猿码系列——2. 搞懂Etcd核心API

= 11; // min_create_revision 是返回 key create revision 下限;更低 create revision 所有 key 都将被过滤掉 int64...min_create_revision = 12; // max_create_revision 是返回 key create revision 上限;更高 create revision...int64 lease = 6; } Put方法存储key到数据库,Put 方法增加键值存储修订版本并在事件历史中生成一个事件。...prev_kv 被设置,将会返回上一个键值对 mvccpb.KeyValue prev_kv = 2; } DeleteRange 方法键值存储中删除给定范围,删除请求增加键值存储修订版本,并在事件历史中为每个被删除...// 当在被压缩修订版本上创建观察者或者观察者无法追上键值对存储进展时发生。 // 客户端应该视观察者为被取消,并不应该试图再次创建任何带有相同 start_revision 观察者

44620

Laravel Eloquent 模型关联关系(下)

,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身获取,总共需要进行 N + 1 次查询,而 PHP 对数据库连接是短连接,每次都要重新连接数据库,所以从性能角度考虑建议使用这种方式...另外,如果访问是模型实例上 author() 方法时,返回不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法方式构建查询构建器进行更加复杂查询,我们以一个一对多查询为例...很显然,它们用于过滤包含对应关联结果模型实例。...>orderBy('created_at', 'desc'); }]); 关联插入与更新 一对多关联记录插入 新增关联模型时候,可以在父模型上调用相应方法直接插入记录到数据库,这样做好处是不需要指定关联模型与父模型外键关联字段值.../createMany 方法插入关联数据,与 save/saveMany 方法不同是,这两个方法接收是数组参数: // 插入一条记录 $post->comments()->create([

19.5K30

laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析

分享给大家供大家参考,具体如下: 1、连接数据库 laravel连接数据库配置文件位于config/database.php中,在其中connection字段中包含laravel所支持数据库配置信息...Laravel内置Eloquent ORM提供了一种便捷方式帮助你组织数据库数据,每张数据表都对应一个与该表进行交互模型(Model),通过Model类,你可以对数据表进行查询、插入、更新、删除等操作...实例,而是通过create方法。...//新建实例并赋值、保存 $stu=new Student(); $stu- name='orm2'; $stu- save(); //create方法批量添加数据 Student::create(['...name'= 'orm3','age'= 13]); 删除数据也有两种方法,一是通过find方法删除指定主键,二是通过查询构建器: //destroy删除指定主键值 Student::destroy(1006,1007

13.3K51

3分钟短文 | Laravel模型关联删除表记录,用观察者还是事件钩子

只用在 Model 模型类中继承并实现 boot 方法,然后调用模型 deleting 事件,使用回调声明执行动作即可。...再进一步 实现同样需求,往往有很多种方式。你还可以换用一种事件钩子方式,就是 Laravel 提供 观察者(Observers)方式。...鲁棒性非常好代码! 推荐方法 还有一种方法,我们本不打算推荐,但是考虑到有的初学者容易犯此类错误,就拿出来最为参照。 程序功能应该单一。比如,尽量避免把数据关联操作放到数据库执行。...推荐使用! 写在最后 本文通过3种方式,实现了Laravel中关联删除表记录功能。...推荐写法是第一种,直接在模型内声明事件钩子,处理起来较为方便; 第二种会造成虽然整洁,但是如果注册观察者过多,不易于模型与观察者之间关联调试; 第三种方式,完全不推荐,我们不应该把数据有效性和完整性操作交给

1.8K10

Laravel消息通知系统之数据库

Laravel 自带了一套极具扩展性消息通知系统,尤其还支持多种通知频道,我们将利用此套系统来向用户发送消息提醒。...通知频道指通知各种途径,Laravel自带有如下几种 数据库 邮件 短信(通过 Nexmo) Slack 通过数据库实现消息通知 1.准备数据表 php artisan notifications...:table 该命令会生成消息通知表迁移文件 database/migrations/{$timestamp}_create_notifications_table.php 使用命令执行迁移文件 php...,via方法表示通过什么途径发送通知,toDatabase是数据库通知方法,这个方法接收 $notifiable 实例参数并返回一个普通 PHP 数组。...这个返回数组将被转成 JSON 格式并存储到通知数据表 data 字段中。 4.触发通知 在某个模型观察者中 <?

1K20

KVO编程指南

二、注册键值观察 您必须执行以下步骤才能使对象接收KVO,兼容属性键值观察通知: 使用方法addObserver:forKeyPath:options:context:向观察者注册被观察对象。...还是NSKeyValueChangeReplacement来插入,移除或替换。...自动发出通知 NSObject提供了自动键值更改通知基本实现。 自动键值更改通知通知观察者使用键值兼容访问器所做更改以及键值编码方法。...在这种情况下,对于要排除其自动通知属性,您会覆盖自动通知ObserversForKeyNSObject实现,自动通知观察者关键字子类实现应返回“NO”。...返回fullName方法可以写成如下形式: - (NSString *)fullName { return [NSString stringWithFormat:@"%@ %@",firstName

84420

30分钟用Laravel实现一个博客

(不过推荐,我习惯是一个项目 对应 一个用户 + 一个数据库,root则只用来管理他们) # 创建用户 blog, 密码自定义 CREATE USER 'blog'@'%' IDENTIFIED BY...blog # 进入你本地服务器用于存放网站文档目录,输入命令 composer create-project --prefer-dist laravel/laravel blog 你还需要配置一个虚拟主机以提升开发效率...comments 评论表 为什么创建用户表呢?...使用 create() 一次性向数据表中插入100条模拟数据 factory(App\Blog::class, 100)->create() 打开数据库,您会发现100条标题和内容都无关紧要,但是对我们快速开发特别有用测试数据已经存放在数据库中了...模型 静态方法 create() 插入 $request->post() 数据即可 $blog = Blog::create($request->post()); //改方法返回值是新插入数据生成对象

7.2K00

Laravel代码简洁之道和性能优化

如果互相喜欢,则添加双向联系人关系,插入之前校验是否存在,存在则更新type等字段,不存在则插入双向数据 我们通过这个场景能非常好体会laravel-upsert强大,不仅减少了代码量,也减少了sql...:优化前5条sql,优化后2条sql laravel-upsert 扩展特性 安装 composer require staudenmeir/laravel-upsert:"^1.0" 用法 插入和更新...您可以提供带有文字或原始表达式列名和键值对(见下文)。...您还可以在忽略重复键错误同时插入记录: Schema :: create ( 'users' , function ( Blueprint $ table ) { $ table ->...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库时间是int类型,不是laravel默认时间格式,并且我们插入时间和更新时间也不是laravel默认字段

5.7K20

通过 Laravel 查询构建器实现简单增删改查操作

`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL)'); 只不过在 Laravel 中,我们推荐这么做,因为这些对数据表结构操作可以通过数据库迁移功能来实现..., [$name, $email, $password]); 如果插入成功,返回 true,插入失败,则抛出 QueryException 异常。...上述代码返回也是包含指定查询结果 stdClass 集合: 有时候我们可能希望返回查询结果中第一条记录,这可以通过将 get 方法替换为 first 方法来实现: $user = DB::table...('users')->where('name', $name)->first(); 这样,返回就是一个单个 stdClass 对象了: 默认返回所有字段,要指定查询字段,可以通过 select 方法来实现...id >= 11 记录,delete 方法返回受影响行数,具体逻辑和原生删除语句也是一样

4.1K20

Laravel 5.2 文档 数据库 —— 起步介绍

读/写连接 有时候你希望使用一个数据库连接做查询,另一个数据库连接做插入、更新和删除,Laravel 使得这件事情轻而易举,不管你用是原生 SQL,还是查询构建器,还是 Eloquent ORM,合适连接总是会被使用...,读/写连接其它数据库配置选项都共用 mysql 数组配置。...使用DB门面的insert方法执行插入语句。..., [1, 'Dayle']); 运行更新语句 update方法用于更新数据库中已存在记录,该方法返回受更新语句影响行数: $affected = DB::update('update users...users'); 运行一个通用语句 有些数据库语句返回任何值,对于这种类型操作,可以使用DB门面的statement方法: DB::statement('drop table users'); 监听查询事件

3.2K71

Laravel事件监听器用法实例分析

在EventServiceProviderlinsten数组里面加上事件和监听器,键名是事件,键值里面的数组是一个或者多个监听器,意思是当某一个事件发生时候,传送给数组里面的那些个监听器,执行一些列操作...public $data; public function __construct($data) { $this- data = $data; } 第四步:设置监听器里面需要执行操作,这里我就直接插入一条记录就行了...: 1、事件作用其实可以被一个方法代替,你在需要调用地方引用一下,然后执行这个方法就行了。...更多关于Laravel相关内容感兴趣读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及...《php常见数据库操作技巧汇总》 希望本文所述对大家基于Laravel框架PHP程序设计有所帮助。

54821

3分钟短文:Laravel模型创建数据条目的2个语法糖

[img] 本期我们开始讲模型中,如何插入新条目,或者更新既有条目。...新建 or 更新 接着介绍laravel模型几个语法糖。一个常规场景,比如在写入数据时,先判断数据库表内是否有该条记录,如果没有就创建,如何有则返回。...模型有一个语法糖方法 firstOrCreate,举一个例子: $event = Event::firstOrCreate(['name' => 'Coffee and Laravel']); 上面的代码相当于下面的操作...::create(['name' => 'Coffee and Laravel']); } 返回总是一个 Event 对象,所以如果想要接着操作其他属性,那就接着写好了: $event->venue...laravel还有一个方法 firstOrNew 用于立即写入数据库,直到手动写入: $event = Event::firstOrNew(['name' => 'Coffee and Laravel

1.9K00

Laravel源码解析之事件系统

Laravel 事件提供了一个简单观察者实现,能够订阅和监听应用中发生各种事件。事件机制是一种很好应用解耦方式,因为一个事件可以拥有多个互不依赖监听器。...方法来启动这些服务,所以Laravel应用中事件和监听器注册就发生在 \Illuminate\Foundation\Support\Providers\EventServiceProvide类 boot...,如果当前监听类是要执行队列任务的话,返回闭包是在执行后会将任务推送给队列,如果是普通监听类返回闭包中会将监听对象make出来,执行对象 handle方法。...类中 observers数组一样,只不过Laravel比那个复杂一些,它 listener数组里会记录多个 Subject和对应 观察者对应关系。...Laravel事件系统原理还是跟之前讲观察者模式一样,不过框架作者功力深厚,巧妙结合应用了闭包来实现了事件系统,还有针对需要队列处理事件,应用事件在一些比较复杂业务场景中能利用关注点分散原则有效地解耦应用中代码逻辑

1K40

Laravel5.2之Demo1——URL生成和存储

/文件夹下新建一个date+create_links_table.php文件,该文件源码主要包含两个非常重要方法:up()/down()。...table=links,生成迁移文件中up()方法里引用了Schema::table()方法而不是Schema::create()方法,再添加$table->string('age')->default...,fillable用来配置数据表字段(column)被批量创建和更新,因为后文在保存数据进入表里时使用Link::create([])方法来进行批量赋值。...这里注意下:如果写table变量,laravel会自动根据model名字复数来找数据表,如这个model名字是link,那就找links表。...根据提供数据在数据表里插入一个记录record 返回该链接给用户(1).使用Query Builderwhere()方法,并传入Input::get('link')参数验证数据表里是否已经有该链接

24K31

Laravel基础

一、Laravel核心目录文件介绍 app:程序核心代码和业务逻辑代码,其中Http目录是我们业务逻辑存放点 bootstrap:包含框架启动和自动加载文件 config:包含所有程序中配置文件...'/demo/{id}',[‘uses’=>控制器名称@控制器下方法]) 2.3 视图 - 使用模板 直接在控制器里面调用view然后return返回即可 return view(路径/模板,...实现CURD(原生SQL语句操作数据库 ) 3.1.1 插入数据 (返回bool 插入是否成功) $result = DB::insert('insert into student(name,age)...方法新增数据(涉及到批量赋值) $student = new Student(); $result = $student -> create([ 'name' => 'create',...'age' => 30 ]); //firstOrCreate 查找数据并返回,如果不存在则插入该条数据并返回 $result = Student::firstOrCreate([ 'name' =>

7.7K30
领券