请问在 Tinker 环境中,User::first ()->save () 为什么和 $user->save () 执行结果不一样?

同题。我是新手,这也许是个蠢问题。别介意。

在Tinker 环境中。对$user进行了赋值

$user = User::first()

然后$user->save()保存数据的时候一切正常。

但是我尝试使用User::first()->save()保存数据的时候,也同样会返回ture

>>> User::first()->save()
=> true

但是结果,数据并没有被保存。请问是为什么呢?

乌鸦嘴新手社区 wyz.xyz 为技术新手提供服务
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

想必你应该是这样写的:

$user = User::first();
$user->name = hello;
User::first()->save();

第一行和第二行都没有问题,问题就处在第三行。

User::first()->save();

这段代码可以看成两个操作:

  1. 取出 User 模型相关联数据库的第一条数据。
  2. 对取出的字段进行存储。

也就是说代码可以看成这样:

$user = User::first();
$user->name = hello;
// 这里 $temp 是我引入的中间变量,便于理解。
$temp = User::first();
$temp->save()

$temp 取出第一条数据,紧接着将它存储。故并不会数据修改。

第三行换成这样的话:

$user->save();

这就会将 $user 里的信息保存,上面你的 $user 做出了修改,所以这里保存的是修改之后的信息。故一切正常。

4年前 评论
shebaoting (楼主) 4年前
飞机飞过天空 (作者) 4年前
shebaoting (楼主) 4年前
讨论数量: 3

User::first()->save() 这样不就是把查出来的一条记录,又不做任何修改原样update一遍,对数据没有影响的。

4年前 评论

想必你应该是这样写的:

$user = User::first();
$user->name = hello;
User::first()->save();

第一行和第二行都没有问题,问题就处在第三行。

User::first()->save();

这段代码可以看成两个操作:

  1. 取出 User 模型相关联数据库的第一条数据。
  2. 对取出的字段进行存储。

也就是说代码可以看成这样:

$user = User::first();
$user->name = hello;
// 这里 $temp 是我引入的中间变量,便于理解。
$temp = User::first();
$temp->save()

$temp 取出第一条数据,紧接着将它存储。故并不会数据修改。

第三行换成这样的话:

$user->save();

这就会将 $user 里的信息保存,上面你的 $user 做出了修改,所以这里保存的是修改之后的信息。故一切正常。

4年前 评论
shebaoting (楼主) 4年前
飞机飞过天空 (作者) 4年前
shebaoting (楼主) 4年前

php 中大部分对象都是按值传递,而非按地址值传递。因此创建的 $user 变量是一个克隆体。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!