Php LARAVEL:销毁和分离方法

Php LARAVEL:销毁和分离方法,php,laravel,eloquent,Php,Laravel,Eloquent,我正在尝试使用此函数删除需要分离关系的投票: public function destroy($id) { $poll = Poll::findOrFail($id); $poll->answers()->detach(); $poll->poll_user()->detach(); $poll->delete(); } 但是我收到了这个错误信息,我不知道为什么: 调用未定义的方法Illumb\Database\Query\Buil

我正在尝试使用此函数删除需要分离关系的投票:

public function destroy($id)
{
    $poll = Poll::findOrFail($id);
    $poll->answers()->detach();
    $poll->poll_user()->detach();
    $poll->delete();
}
但是我收到了这个错误信息,我不知道为什么:

调用未定义的方法Illumb\Database\Query\Builder::detach()

以下是投票模式:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Poll extends Model
{

    /**
     * La table utilisée par le modèle
     *
     * @var string
     */
    protected $table = 'polls';

    /**
     * On utilise les dates de mise à jour
     *
     * @var bool
     */
    public $timestamps = true;

    /**
     * Attributs autorisés en ensignement de masse.
     *
     * @var array
     */
    protected $fillable = ['question'];

    /**
     * Relation de type 1:n
     *
     * @return Illuminate\Database\Eloquent\Relations
     */
    public function answers()
    {
        return $this->hasMany('App\Models\Answer');
    }

    /**
     * Relation de type n:n
     *
     * @return Illuminate\Database\Eloquent\Relations
     */
    public function users()
    {
        return $this->belongsToMany('App\Models\User')->withTimestamps();
    }
 }

尝试以下代码:

public function destroy($id)
{
    $poll = Poll::findOrFail($id);
    $poll->answers()->dissociate();
    $poll->users()->sync([]);
    $poll->delete();
}

如果这不起作用,那么可能需要查看您的其他模型或迁移。

我不知道它是否正确,但我已经完成了以下工作,并且工作得非常完美:

public function destroy($id)
{
    $poll = Poll::findOrFail($id);
    $poll->answers()->delete();

    $poll->users()->detach();
    $poll->delete();
}

我假设您在模型中以正确的方式设置了连接,并且我认为您正在尝试在父控制器(而不是子控制器)中调用此方法。 基于这些,这段代码应该可以工作

public function destroy($id)
{
    $poll = Poll::findOrFail($id);

    foreach ($poll->answers as $answer) 
    {
        $answer->poll()->dissociate();
        $answer->save();
    }

    foreach ($poll->user as $user) 
    {
        $user->poll()->dissociate();
        $user->save();
    }

    $poll->delete();
}

您不能在oneToMany关系中使用
detach()
。 您可以使用
delete()

而你的用户分离是不正确的。您可以像这样使用detach

$poll->users()->detach()

你的民意测验/回答关系是什么?你能发布你的民意测验模型吗?一个月,一个月,n个回答什么版本的拉威尔?您确定不需要使用
dissection()
而不是
detach()
detach()
用于多对多关系。我也尝试过使用dissection,但得到了相同的错误:调用未定义的方法illumb\Database\Query\Builder::dissection(),版本是5.2.6我得到了相同的xD:调用undefined方法illumb\Database\Query\Builder::sync(),它可以在不分离关系的情况下工作,但我认为这根本不正确抱歉,错误地在1-m上进行了同步,所以它可以工作?可能是因为你有级联删除?取决于您的迁移。可能是因为答案的轮询集不能为null。但是错误消息并不明确…只要它有效。其他人可能会有更多的洞察力。这是因为民意测验与答案之间存在着一种单一的关系。Detach仅适用于许多关系,如users(),您能将这些注释翻译成英语吗?
$poll->answers()->delete()
$poll->users()->detach()