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

Laravel,与Pivot同步数据

司空鸿禧
2023-03-14

Laravel 5.3,我有两种型号:

用户:

public function newFunctions()
{
    return $this
        ->belongsToMany('App\NewFunctions', 'user_newfunctions')
        ->withPivot(['function_count', 'days_count']);
}

新函数:

public function users()
{
    return $this
        ->belongsToMany('App\User', 'user_newfunctions', 'new_function_id', 'user_id')
        ->withPivot(['function_count', 'days_count']);
}

我现在知道如何使用以下方法将新数据保存给用户:

$user = User::findOrFail($id);
$user->name = $request->input('name');
$user->save();

但是现在我必须更新透视表的一些值。透视表如下所示:

user_id | new_functions_id | function_count | days_count
---------------------------------------------------------
    814 |           1      |   5            |2019-07-19 12:26:19
    814 |           3      |   7            |2019-07-19 12:26:19

每个用户id我有超过1行。我试图使用:

$user
    ->newFunctions()
    ->sync([
        'days_count' => $test_date,
        'function_count' => $test_int_number
    ]);

但我得到的错误是:

回程偏置式

因为正在尝试使用此更新:

array(
    'records' => array(
        'days_count' => object(Carbon), 'function_count' => '66'),
        'results' => array(),
        'id' => object(Carbon),
        'attributes' => array()

    )
)

in BelongsToMany.php

因此:

  • 如何更新数据透视表上每个user_id的值?
  • 如何使用sync更新function_count和days_count?他们来自请求

共有1个答案

曹骞仕
2023-03-14

-

$user->newFunctions()->sync([
    "new_function_id" => 1,
    "function_count" => 6,
    "days_count" => "2019-07-08 12:00:00",
]);

这将删除new\u function\u id3的记录,并更新new\u function\u id1的值。

要为13new\u function\u id更新function\u countdays\u count,请使用-

$user
    ->newFunctions()
    ->updateExistingPivot("1", [
        "function_count" => 6,
        "days_count" = "2019-07-08 12:00:00"
    ]);
// or $user->newFunctions()->updateExistingPivot("3", ...);

这将更新其中new_function_id1的数据透视表,而保留其中new_function_id3的行。

编辑:如果希望更新透视表中的所有现有记录,则需要在循环中执行此操作,调用与单个数组中所有当前记录的同步,或运行手动查询。

 类似资料:
  • 问题内容: Laravel 4的口才ORM 和之间有什么区别?我尝试环顾四周,但找不到任何东西! 问题答案: 连接(): 处理多对多关系时插入相关模型 预期没有数组参数 例: 同步(): 与该方法类似,该方法用于附加相关模型。但是,主要区别在于: 接受一组ID放置在数据透视表上 其次, 最重要的是 ,如果数组中不存在模型,则sync方法将从表中删除模型,并将仅新项插入到数据透视表中。 例: use

  • input { mongodb { uri => 'mongodb://web:l8ka65##1@10.112.5.11:32222/who_aa_cen' placeholder_db_dir => "/tmp/logstash-mongodb/who_log" placeholder_db_name => "who_aa_cen" collection

  • 我正在制作一个VueJS表单,用户可以在其中编辑一个步骤。一个步骤可以有许多父产品。逻辑是一个步骤可以属于多个产品。我有一个名为products、product_step(透视表)和steps的表。 当用户第一次加载页面时,该数组将填充此stap的父产品。 此阵列将根据用户决定在前端执行的操作进行更改。假设他们希望产品n不再具有此步骤的访问权限。在这种情况下,产品将从阵列中删除。 我面临的问题是,

  • 问题内容: 我正在考虑使用日常脚本来执行以下操作,以解决ES服务器上更新存在问题的任何情况(我还没有高可用性设置,即使如此,它仍然可能是在数据库和ES之间复制数据的情况下的良好做法)。在把这个脚本放在一起之前,我想我会检查一下是否要以正确的方式进行操作,以及是否应该使用任何库或技术。 该脚本将简单地从数据库中检索所有ID,并从ElasticSearch中检索所有ID,其中(当前时间的快照,因为它是

  • 问题内容: 我们什么时候应该使用 的ReentrantReadWriteLock 相比, 同步 在Java的多线程环境中的关键字? 使用 ReentrantReadWriteLock而 不是Java中的 同步 有什么好处? 任何人都可以举一个例子(用Java)吗? 谢谢! 问题答案: 同步一次允许一个线程。 读/写锁可以同时允许多个读取器,但前提是没有写入器。因此,在某些使用情况下,由于读取器群体

  • 问题内容: 由于Servlet 3.0 支持异步处理。使用始终异步处理会更好吗?或者在什么情况下同步处理更好? 问题答案: 异步Servlet带来的最大好处是HTTP push ,在该服务器中,服务器可以在选择时向客户端发送信息,而不是在客户端请求时将信息发送回客户端。在异步Servlet之前,这将需要长时间运行的HTTP连接,每个HTTP连接都会束缚服务器线程,这是非常低效的。这个新模型使服务器