首页 > 解决方案 > 为什么扩展类在 Laravel 中与 Modules 没有关系?

问题描述

我有一个Person类 ( App\Models\Person) 和一个Organization类 ( ),它们与( )App\Models\Organization具有多态关系。我正在使用模块()。在我的启动方法中,我有这种关系:UserApp\Models\Usernwidart/laravel-modulesApp\Providers\AppServiceProvider

        Relation::morphMap(
            [
                'organizations' => 'App\Models\Organization',
                'persons'       => 'App\Models\Person',
            ]
        );

现在,我有一个名为 的模块Contracts,该模块有一个Person模型 ( Modules\Contracts\Entities\Person),它从App\Models\Person. 我还有一个User模型 ( Modules\Contracts\Entities\User),它从App\Models\User. ContractsServiceProvider我在引导方法中添加了以下代码:

        Relation::morphMap(
            [
                'persons'       => 'Modules\Contracts\Entities\Person',
            ]
        );

现在,如果我去任何控制器并加载Person这样的:

$person = \App\Models\Person::find( 1 );

与的关系User不存在,所以我做不到$person->users()->first();

但是如果我像这样加载一个人:

$person = \Modules\Contracts\Entities\Person::find( 1 );

这种关系就像一种魅力。

有趣的是,所有与用户的关系方法都在目录中的文件User.phpPerson.phpapp\Models

app\Models\User.php我有:

class User extends Authenticatable implements MustVerifyEmail {

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

}

在我的app\Models\Person.php

class Person extends Model {

    public function users()
    {
        return $this->morphMany( User::class, 'usable', 'usable_type', 'usable_id' );
    }

}

此外,当我创建一个\App\Models\User这样的\App\Models\Person

$person = \App\Models\Person::find( 1 );
$person->users()->create( [ ... ] );

数据库中users表中的记录是这样的:

+------------------------------------------------------------------------+
| id |                 email             | usable_id | usable_type       |
+------------------------------------------------------------------------+
|  1 | some@email.com                    |         3 | App\Models\Person |
+------------------------------------------------------------------------+

但是,如果我这样创建用户\Modules\Contracts\Entities\Person

$person = \Modules\Contracts\Entities\Person::find( 1 );
$person->users()->create( [ ... ] );

数据库中users表中的记录是这样的:

+------------------------------------------------------------------------+
| id |                 email             | usable_id | usable_type       |
+------------------------------------------------------------------------+
|  1 | some@email.com                    |         3 | persons           |
+------------------------------------------------------------------------+

我想知道这ContractsServiceProvider是否以某种方式压倒了AppServiceProvider我的关系并导致我的关系失败。任何帮助,将不胜感激。

谢谢

标签: phplaravelmodulerelationship

解决方案


推荐阅读