我遇到此错误:
Call to undefined method Illuminate\Database\Query\Builder::detach()
它来自PollRepository:
public function destroy($id)
{
// Ici on doit supprimer le sondage d'identifiant $id
// Il faut nettoyer les tables "polls", "answers" et "poll_user" (pour cette dernière pensez à la méthode "detach" qui simplifie la syntaxe)
$poll = Poll::findOrFail($id);
$poll->answers()->detach();
$poll->users()->detach();
$poll->delete();
}
有必要清理表“ polls”,“ answers”和“ poll_user”(为此,最后一个要考虑简化语法的“ detach”方法)。
答案 0 :(得分:1)
这是因为findOrFail()
方法返回Eloquent集合,而不返回Eloquent模型。使用firstOrFail()
来获得口才模型投票。这样,您就可以使用detach()方法。
答案 1 :(得分:0)
由于detach()
仅适用于多对多关系,因此您需要更改删除关系的方式。
从您的关系图中可以看出,Poll
和Answer
之间的关系并不是多对多的,这很有意义。但是,Poll
和User
具有多对多关系。
因此,以下方法应该起作用:
public function destroy($id)
{
$poll = Poll::findOrFail($id);
$poll->answers()->delete();
$poll->users()->detach();
$poll->delete();
}
或:使用Model Events是一个很好的例子。您可以将deleting()
事件添加到您的App\Poll
模型中。
class Poll extends Model
{
//
//
public static function boot() {
parent::boot();
static::deleting(function($poll) {
$poll->answers()->delete();
$poll->users()->detach();
});
}
}
...,然后每次删除轮询时,只需执行以下操作。
public function destroy($id)
{
return Poll::findOrFail($id)->delete();
}
关系将被自动删除。