【发布时间】:2018-06-18 16:40:17
【问题描述】:
我在 Laravel 中开发了一个存储在 LaravelRoot/packages/myname/project/ 中的包。
在我的包中,我必须使用一个扩展的用户模型,其中包含默认用户模型中未提及的关系。
现在这是我的问题: 如何覆盖我的包中的默认用户模型?
更多细节:
如果我在我的包中通过Auth::user() 接收当前用户,我将使用默认的App\User 接收一个对象。
我扩展了这个模型,现在包含一个新的关系函数,存储在LaravelRoot/packages/myname/project/src/App/Models/User(命名空间:Myname\Myproject\App\Models)。
这是我的关系函数:
/**
* The roles that belong to the user.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function roles()
{
return $this->belongsToMany(Role::class)->withTimestamps();
}
这个关系只在我的包中使用,所以我不想把这个函数存储在默认的App\User中。是否可以在我的包中使用Auth::user() 接收我的扩展用户模型的对象,还是每次我需要这个时我都必须手动接收?
【问题讨论】:
-
你为什么不希望在你的类中有一个方法?一种方法比两种模型更好。
-
@shukshin.ivan 因为我将在许多其他项目中使用这个包。将这个包添加到一个新项目现在只包含两个步骤: 1. 在目录结构中添加包。 2. 添加我的 package-service-provider。将此功能添加到默认用户模型会每次添加此功能都会受到影响,我想使用我的包。
-
或者创建一个特征并在你的用户模型中调用它!并将其作为要求添加到您的包中!
标签: php laravel model package laravel-5.5