我正在try 用现有的外键值更新多行数据,其中basket应该只链接到外部ID 100.

示例:

id title basket_id (foreign key to another table)
1 apple 100
2 banana 200
2 kiwi 300

我try 了以下几点:

$fruits = Fruit::whereIn('basket', [200, 300])->get();

foreach ($fruits as $fruit) {
  $fruit->update([
    "basket_id" => 100
  ])
}

这可以很好地工作,但是,当我打印$fruit时,我仍然在eloquent的relations属性中得到旧的basket_id.

我是不是漏掉了一步?

谢谢

推荐答案

要获取它,可以对$fruit对象使用fresh()refresh(),如下所示:

$fruits = Fruit::whereIn('basket', [200, 300])->get();

foreach ($fruits as $fruit) {
  $fruit->update([
    "basket_id" => 100
  ]);
  $fruit->refresh(); // Fetch updated object
}

https://laravel.com/docs/10.x/eloquent#refreshing-models

fresh方法将从数据库中重新检索模型.现有的模型实例不会受到影响:

$flight = Flight::where('number', 'FR 900')->first();
$freshFlight = $flight->fresh();

refresh方法将使用数据库中的最新数据对现有模型进行再水化.此外,还将刷新其所有加载的关系:

$flight = Flight::where('number', 'FR 900')->first();
$flight->number = 'FR 456';
$flight->refresh();
$flight->number; // "FR 900"

Php相关问答推荐

在不刷新页面的情况下无法使用JQuery更新id

PHP在将数组子集赋给变量时是否复制数组子集?

LaravelEloquent 的地方条件父/子与第三模型多对多

msgraph-sdk-php v2如何传递skiptoken到request?

获取要删除的图像的公共ID

根据产品类型显示或隐藏WooCommerce管理产品自定义字段

PHP测试字符串的所有POST值

在WooCommerce中的本地收件发货方式下添加一个 Select 字段

从两个日期创建日期范围,然后为范围中的每个日期复制子数组

未收到Strava WebHook事件数据

Regex:高级删除单行PHP注释

如果所有请求都通过index.php路由,如何使用htaccess文件强制使用HTTPS?

使用帖子 ID 更新 wp 帖子

Woocommerce 相关产品按其类别或排名数学主要类别

在 WooCommerce 我的帐户自定义部分显示未购买的产品

PHP文件如何从CSS执行

Shopware 6.4.20店铺激活问题

如果有很多重定向,PHP curl 的行为不像命令行 curl

PDO 和 SQL 查询结果中日期格式不同的原因可能是什么?

自定义错误页面不适用于 Apache 和 nginx 设置的 .htaccess