与命名空间的多态Eloquent关系

Isr*_*uño 10 polymorphism laravel eloquent laravel-4

我试图实现多态关系.它们完美地工作......但是,我正在尽可能地减少我的数据库大小......所以我就是这样

Table action
|  id  |  realatable_type  |  relatable_id
|  1   |  Lion\People      |  65
|  2   |  Lion\Company     |  13
Run Code Online (Sandbox Code Playgroud)

显然我是这样的

<?php namespace Lion;

class Company extends \Eloquent { ... }
class People extends \Eloquent { ... }
Run Code Online (Sandbox Code Playgroud)

假设命名空间总是"狮子",有没有办法只存储"人"或"公司"?

Rod*_*ore 23

从Laravel 4.1开始,在您的模型中(在本例中为CompanyPeople),您可以将受保护的属性设置为$morphClass您想要的任何内容.

<?php namespace Lion;

class Company extends \Eloquent { 

    protected $morphClass = 'Company';
}
Run Code Online (Sandbox Code Playgroud)

现在在您的表中,您可以存储没有命名空间的类型:

 |  id  |  realatable_type  |  relatable_id
 |  2   |  Company          |  13
Run Code Online (Sandbox Code Playgroud)

  • 在Laravel 5.3中,$ morphClass属性已被删除。现在您需要使用`Relation :: morphMap(['company'=&gt; Company :: class]);` (2认同)