分离 Laravel 5.3

Posted

技术标签:

【中文标题】分离 Laravel 5.3【英文标题】:Detach 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,
    ]);

谢谢。

【问题讨论】:

我觉得我们在这里遗漏了一些信息。你能发布更多代码吗?你在哪里叫收银员? 收银员出错。我添加了该方法的完整代码。谢谢。 【参考方案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 数组作为参数。

以上是关于分离 Laravel 5.3的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel 从 5.3 升级到 5.4

laravel 路由重定向问题(laravel 5.3)

从 Laravel 5.3 升级到 Laravel 5.4 并且空字段转换为 NULL

Laravel 5.3 密码代理自定义

找不到路线返回页面 Laravel 5.3

laravel 无法打开输入文件:artisan (5.3)