1

我无法在两个模型之间创建多态关系:

  • 上传
  • 团体

模型的简化版本:

use Cartalyst\Sentry\Groups\Eloquent\Group as SentryGroupModel;

class Group extends SentryGroupModel {

  ...

  /**
   * returns the logo (upload model) from this agency
   *
   * @return Upload
   */
  public function logo()
  {
      return $this->morphOne('Upload', 'uploadable', 'model_type', 'model_id');
  }  

  ...

}

上传模型的简化版本

class Upload extends Eloquent {

  ...

  /**
   * returns the polymorphic relationship
   *
   * @return Upload
   */
  public function uploadable()
  {
      return $this->morphTo('uploadable', 'model_type', 'model_id');
  }  

  ...

}

如您所见,Group模型实际上是 Sentry 2 Group 模型的扩展,它是 Eloquent 模型的扩展。

当在控制器中调用关系时:

$agencyGroup->logo->saveUpload('logo');

我收到 PHP 错误:

在非对象上调用成员函数 saveUpload()

有什么帮助吗?

4

1 回答 1

2

该函数logo()返回一个MorphOne关系,并且由于没有名为saveUploaddefined o的方法MorphOne,它会将调用重定向到它的Builder,它也没有该方法并抛出您遇到的第二个异常:

调用未定义的方法 Illuminate\Database\Query\Builder::saveUpload()

这种行为是意料之中的,这也是 Eloquent 的工作方式。这就是为什么你应该像一开始尝试的那样使用logo 没有。 ()

虽然,您$agencyGroup可能没有徽标,这会导致NULL->saveUpload()我提到并引发第一个异常:

在非对象上调用成员函数 saveUpload()

尝试简单地将其添加到您的控制器上:

if (empty($agencyGroup->logo)) {
    var_dump("There's no logo.");
    die();
}

$agencyGroup->logo->saveUpload('logo');

如果您看到消息“没有徽标”,则意味着您应该先创建一个徽标,然后再调用它的saveUpload方法。

于 2013-08-20T14:45:44.483 回答