在多态关系中关联子模型会导致无限循环?

时间:2014-05-21 09:37:05

标签: laravel laravel-4 eloquent

我有一个基础Message类,用于使用多态关系附加自定义消息类型的收件箱,这些类型都实现相同的接口,并根据其类型在视图中表现不同。显示所有这些都在游泳,但是当我尝试用代码添加这些时,我遇到了麻烦。

这是Message类:

<?php

class Message extends Eloquent {
    public function author() {
        $this->belongsTo("User", "author_id");
    }

    public function recipient() {
        $this->belongsTo("User", "recipient_id");
    }

    public function message() {
        $this->morphTo();
    }
}

我附加到message()的模型实现了MessageInterface,所以我想我可以快速帮助通过Message::send()附加此模型的关系:

public static function send(MessageInterface $message, User $to, User $from) {
    if (! $message->exists)
        $message->save();

    $parent = new static;

    $parent->author()->associate($from);
    $parent->recipient()->associate($to);
    $parent->message()->associate($message); // line that errors

    return $parent->save();
}

但是这最终会让我看起来无限递归:

FatalErrorException: Maximum function nesting level of '100' reached, aborting!

这是studly函数,在某些搜索中,当两个模型相互引用时,似乎会发生这种情况。

消息表的模式是:

$table->increments("id");
$table->integer("message_id")->unsigned();
$table->string("message_type");
$table->integer("recipient_id")->unsigned();
$table->integer("author_id")->unsigned();
$table->timestamps();

我在做什么真的错了,在这里?我查看了the source中的morphTo方法调用并尝试查看此处是否存在反射问题(抓取函数名称和蛇套管它),但我似乎无法找到正在发生的事情。 associate方法调用只是设置属性并获取message_type的类名,然后返回关系。

错误中没有有用的信息;它是一个没有上下文的Symfony\Component\Debug\Exception\FatalErrorException

我正在运行Laravel 4.1

0 个答案:

没有答案