LARAVEL:销毁和分离方法

时间:2016-12-28 10:22:01

标签: php laravel eloquent

我试图删除使用此功能的民意调查,我需要分离关系:

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

但我收到此错误消息,我不知道原因:

  

调用未定义的方法Illuminate \ 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();
    }
 }

5 个答案:

答案 0 :(得分:0)

请尝试以下代码:

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

如果不起作用,则可能需要查看其他模型或迁移。

答案 1 :(得分:0)

好吧,我不知道它是否正确,但我已经完成了以下工作并且完美无缺:

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

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

答案 2 :(得分:0)

我想你在模型中以正确的方式建立了连接,我认为你试图在父控制器中调用这个方法(而不是在子控制器中)。 基于这些代码应该有效...

{{1}}

答案 3 :(得分:0)

/**
 * Removing an entity
 *
 * @param  integer $id
 * @return void
 */
public function destroy($id)
{
    $this->getById($id)->users()->detach();
    $this->getById($id)->answers()->delete();
    $this->getById($id)->delete();
}

/**
 * Getting an entity by id
 *
 * @param  integer $id
 * @return void
 */
public function getById($id)
{
    return Poll::find($id);
}

答案 4 :(得分:0)

您不能在oneToMany关系中使用Same letters are: dc 。 您可以使用detach()

delete()

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

$poll->answers()->delete()