【问题标题】:Detach Laravel 5.3分离 Laravel 5.3
【发布时间】:2016-10-17 12:03:38
【问题描述】:

经过几个小时的调试并尝试解决问题,我没有找到解决方案。所以,我希望你能帮助我。

我有这段小代码:

$removed = false;
if ($store->persons->contains($person)) {
    $store->persons()->detach($person);
    $removed = true;
}

var_dump($removed);

我的问题是我不明白为什么 $remove 总是“假”。 如果我注释 $store->persons()->detach($person); 行,一切都会按预期进行,并且 $removed 将是“true”。我不明白为什么会这样,但我希望你能帮助我。

编辑

public function removePerson(Request $request, $storeId, $personId)
{
    $store = Store::findOrFail($storeId);
    $person = Cashier::findOrFail($personId);

    $removed = false;
    if ($store->persons->contains($person)) {
        $store->persons()->detach($person);
        $removed = true;
    }

    return response()->json([
        'removed' => $removed,
    ]);
}

谢谢。

【问题讨论】:

  • 我觉得我们在这里遗漏了一些信息。你能发布更多代码吗?你在哪里叫收银员?
  • 收银员出错。我添加了该方法的完整代码。谢谢。

标签: php laravel detach


【解决方案1】:

detacth/attach 方法不将完整模型作为参数,而是它们都需要相关模型的 id,因此在您的情况下,您需要在 detach 方法中传递 id。

public function removePerson(Request $request, $storeId, $personId)
{
    $store = Store::findOrFail($storeId);
    $person = Cashier::findOrFail($personId);

    $removed = false;
    if ($store->persons->contains($person)) {
        $store->persons()->detach($person->id); // or $personId which ever
        $removed = true;
    }

    return response()->json([
        'removed' => $removed,
    ]);
}

【讨论】:

  • 使用 object 或 id 可以正常工作(分离),但是我不知道为什么 $remove 不成立。
  • And... 在 Laravel 5.3 中,分离函数在第一步中检查参数是否是模型或集合的实例。因此,您可以指定模型、集合或 id 数组作为参数。
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2017-04-28
  • 2017-01-12
  • 2017-03-28
  • 2017-01-23
  • 2017-01-26
相关资源
最近更新 更多