首页
学习
活动
专区
工具
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.2之Model Observer模型观察者

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

1.7K21

php基础(一)

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

2.1K20
  • Laravel Eloquent 模型关联关系(下)

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

    19.6K30

    读猿码系列——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 的观察者。

    54120

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

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

    1.9K10

    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.触发通知 在某个模型的观察者中 <?

    1.1K20

    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.4K00

    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.8K20

    KVO编程指南

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

    88420

    通过 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.2K20

    Laravel源码解析之事件系统

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

    1.1K40

    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

    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 Builder的where()方法,并传入Input::get('link')参数验证数据表里是否已经有该链接

    24.1K31

    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.8K30

    Laravel 6.12.0 版本发布,支持从扩展包加载模型工厂

    下面我们一起来看下其中比较重要的一些新特性: 1、重要特性 1)从扩展包加载模型工厂 在 Laravel 6.12 中,你可以在扩展包中直接使用已经存在的模型工厂,而不需要重新创建它们,方法是在服务提供者中引入对应的包含模型工厂的文件...Session 或者特定键值(Session 的指定键值): $response->dumpSession(); $response->dumpSession('example'); $response...createMany() 用于通过自定义数据创建多条记录: // Laravel 6.12 版本之前需要这么做 factory(User::class)->create([ 'name' =>...() 方法 恢复对 PHPUnit 7 的支持 新增 Request::boolean() 方法 新增 Database\Eloquent\FactoryBuilder::createMany() 方法...为 PhpRedis 新增缺失选项 2)问题修复 修复 Cache\RedisLock::acquire() 方法存在的问题 修复数据库 url 连接解析时没有指定数据库的问题 防止表名前缀不明确的列

    77010

    Laravel中使用路由控制权限(不限于Laravel,只是一种思想)

    roles() { return $this->belongsToMany(Role::class); } } Database Seed 插入一些记录: #######...,还是要在不同的方法进行验证,而且可扩展性不高,这时候我们只需要在权限表加一个字段,就可以解决问题 1. permissions (加多一个 route 字段, 如果不在 laravel 中使用,可以加一个...这时候插入数据的时候,我们只要做好相关的录入 +-------+-----------------+------------------+ | id | name |...,如果没有返回 null * (不在 laravel 中使用时,可以获取当前 url) ****************************************/...判断权限表中这条路由是否需要验证 if ($permission = Permission::where('route', $route)->first()) { // 当前用户不拥有这个权限的名字

    22110

    【Laravel系列7.5】事件系统

    JS 中的回调函数,按扭的回调事件?没错,这些都是事件的应用。不过在 Laravel 中,事件是一种解耦机制,是 观察者 模式的一种体现。它能够允许你订阅和监听在你的应用中发生的各种事件。...就像观察者模式中的 观察者 一样。我们的 Subject 类中可以保存多个 Observer ,当调用 Subject 的 notify() 方法之后,多个观察者可以进行后续的操作。...在 makeListener() 方法中,最后返回的是一个闭包回调函数。...::class => [ TestListener::class ], 这样的定义,所以它会走 is_string() 判断中的 createClassListener() 方法,这个方法内部返回的也是一个回调函数...,我们会发现有 handle 字符的出现,通过 Str::parseCallback() 这个方法会返回一个数组。

    1.7K30

    基于观察者模式设计的框架-REB,使代码模块化

    观察者模式工作流程 被观察者注册观察者:被观察者维护一个观察者列表,并提供注册(添加)和注销(删除)观察者的方法。...被观察者状态变化:当被观察者的状态发生变化,它会遍历其观察者列表,调用每个观察者的更新方法,将状态变化通知给它们。...创建信号模式的观察者,只接收事件信号,不传输数据的观察者 observer_signal_wait 信号模式的观察者,等待同步信号 observer_callback_create 创建回调模式的观察者...observer_task_create 创建任务模式的观察者 observer_delete 删除观察者 创建信号模式的观察者 该接口是创建信号模式的观察者,它只接收事件信号,不传输数据的。...,它是采用插队的方式发送消息,它会将发布的消息插入消息队列的头部。

    41930

    Zookeeper

    Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在...当这个 Znode 发生改变,也就是调用了 create,delete,setData 方法的时候,将会触发 Znode 上注册的对应事件,请求 Watch 的客户端会接收到异步通知。...具体交互过程如下: 客户端调用 getData 方法,watch 参数是 true。...服务端接到请求,返回节点数据,并且在对应的哈希表里插入被 Watch 的 Znode 路径,以及 Watcher 列表。...最大事务id 最大 ZXID 也就是节点本地的最新事务编号,包含 epoch 和计数两部分。epoch 是纪元的意思,相当于 Raft 算法选主时候的 term。

    59030
    领券