laravel UpdateExistingPivot方法不起作用

nwsw7zdq  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(182)

我正在尝试更新数据透视表中的值。这是我的方法:

public function updateStatus(Event $event)
{
    $this->authorize('updateStatus', $event);

    $newStatus = Input::get('status');
    $actualPivot = $event->guests()->where('user_id', Auth::id())->first()->pivot;

    $id = $actualPivot['id'];
    $status = $actualPivot['status'];

    if ($newStatus != $status)
    {
        dd($event->guests()->updateExistingPivot($id, ['status' => $newStatus]));
    }

    return back();
}

我已经用HeidiSQL检查过了,该行没有按照它应该的方式更新。我也试过this solution,但是它没有更新该行,而是创建了一个新的行。有一个dd(),它有这样的方法:

array:3 [▼
  "attached" => array:1 [▼
    0 => 1
  ]
  "detached" => []
  "updated" => []
]

这是我在Event模型中定义的guests()关系:

public function guests()
{
    return $this->belongsToMany('App\User')
                ->using('App\Invitation')
                ->withPivot('id', 'status')
                ->withTimestamps();
}

我不知道为什么updateExistingPivot()方法不起作用,希望你能帮忙。

oug3syen

oug3syen1#

您必须使用guest_idApp\Invitation外键的任何名称来代替透视ID,以便更新现有记录,否则您没有与透视ID匹配的当前事件的关系。

$id = $actualPivot['guest_id']; // change guest_id for your foreig key name of \App\Invitation
$status = $actualPivot['status'];
if ($newStatus != $status)
{
    dd($event->guests()->updateExistingPivot($id, ['status' => $newStatus]));
}

相关问题