在Laravel 5.8中,如何在模型和包模型之间建立多态关系?

时间:2019-05-17 02:10:46

标签: laravel laravel-5 eloquent

我有一个名为Company\Contact\Models\Contact的包装模型

我有一个名为App\Models\MenuItem的本地模型

菜单项是具有以下内容的多态表:

id
menuable_id  
menuable_type

当我在\App\Models\Page之类的本地模型上使用它时,它可以正常工作。当我在我的menuable模型中调用MenuItem关系时,该关系为:

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

$menuitem->menuable它为我提供了很好的,完美的页面模型实例。但是,当我在任何封装模型上执行此操作时,它就是null

我尝试绑定模型:

$this->app->bind('Company\Contact\Models\Contact', function () {
    return new Contact;
});

但这没用。

然后我尝试在AppServiceProvider启动中映射它:

use Company\Contact\Models\Contact; // This does dump an instance of the contact model. 

Relation::morphMap([
    'Company\Contact\Models\Contact' => Contact::class,
]);

有人知道该怎么做吗?

请告知我是否可以提供更多信息。

1 个答案:

答案 0 :(得分:1)

您可以在自己的应用程序代码库中扩展软件包模型。在您的App/Models目录中创建一个新的 Contact 类:

<?php

namespace App\Models;

use Company\Contact\Models\Contact as CompanyContact;

class Contact extends CompanyContact
{
  // your polymorphic relationship methods
}

现在,您可以在应用程序中使用App\ModelContact模型,而不是软件包模型。