当前位置: 首页 > 知识库问答 >
问题:

带可选参数的Laravel同步关系

荀豪
2023-03-14

我使用sync函数同步belongstomy关系:

$model->products()->sync($productIds);

在$productIds数组中,有一个带有一些id的平面数组,类似这样:

$productIds = [1,3,5,6];

我想要的是:pivot表还有其他列,如“created_by”和“updated_by”。

但是,如何在不执行foreach循环的情况下将这些字段添加到数组中呢?有没有较短的方法可以做到这一点?

我需要这样一个数组:

$productIds = [1 => [
     'created_by' => 1,
     'updated_by' => 1
],3 => [
     'created_by' => 1,
     'updated_by' => 1
],5 => [
     'created_by' => 1,
     'updated_by' => 1
],6 => [
     'created_by' => 1,
     'updated_by' => 1
]];

是的,我知道我可以用foreach来完成,并在循环数组时添加列。但是我想把它缩短一点。。有没有一种方法可以缩短时间(也许是使用laravel)?

共有1个答案

周祺
2023-03-14

将代码示例中$productIds中设置的内容传递给sync()就足够了。

此方法不仅适用于整数数组。您还可以传递一个数组,其中key是同步的ID,value是应该为给定ID设置的透视属性数组。

这应该可以做到:

$productIds = [
  1 => [
    'created_by' => 1,
    'updated_by' => 1
  ]
  //rest of array
];

$model->products()->sync($productIds);

只要确保在关系定义中将这些字段定义为透视字段。

为了基于$productIds中的ID列表生成此类表,您可以执行以下操作:

$productIds = array_fill_keys($productIds, array(
  'created_by' => 1,
  'updated_by' => 1,
));
 类似资料:
  • 但是,如果Terminal中没有提供,我不知道如何(或者是否能够)为其设置默认值。像这样简单的东西不起作用。这里的一个解决方案是根据的内容或大小在函数中设置变量。但我不知道有没有更好的办法做到这一点。 因此,我正在寻找一种方法来使用来自终端的参数调用一个函数,其中需要一个数字(在本例中为2),而其余的是可选的,并设置为默认值。

  • 我在一个laravel控制器中运行以下代码, 但是我似乎从服务器上得到了以下错误, {“error”:{“type”:“ErrorException”,“message”:“preg_replace():参数不匹配,模式为字符串,而替换为数组”,“file”:“/Users/S/Sites/app api/vendor/laravel/framework/src/illumb/Support/he

  • 问题 你想写一个装饰器,既可以不传参数给它,比如 @decorator , 也可以传递可选参数给它,比如 @decorator(x,y,z) 。 解决方案 下面是9.5小节中日志装饰器的一个修改版本: from functools import wraps, partial import logging def logged(func=None, *, level=logging.DEBUG,

  • 我正在构建一个简单的实体分页列表,支持使用ReactJS的动态过滤器。数据是在react查询库的帮助下从RESTful API层获取的。它在服务器上进行分页和筛选。所选过滤器需要存储在URL的查询参数中,以便在刷新页面时恢复。我正在努力寻找最干净的方法,将过滤器的状态与当前URL同步。我不想引入其他依赖项,如React Router,但我已经在应用程序中使用了redux。但是,我不想在redux存

  • 我有一个餐厅模型: 具有与Order的hasMany关系。 我想做的是在一些日期之间得到餐厅的订单。 这是我试过的,但并不好。换句话说,我想通过一些参数来过滤一个模型的关系。

  • 问题内容: 我正在向数据库中插入大约500 000个对象,其中许多对象是相同的(数据库中具有相同的主键表示),但是其他字段可能不同,因此我使用的方法是“更新-如果没有受影响的行-插入”。问题在于,有时对象的某些字段设置为null(无法从文件读取),并且已经在数据库中设置了某些值,因此我将其更新为null =删除它。)如何实现方案,即只更新字段不为空? 这是我现在如何做的一个简单示例: 问题答案: