使用完整模型名称的Laravel Polymorphic Relation

时间:2017-07-07 22:02:53

标签: laravel-5 polymorphism

我在Laravel 5.4中设置了多态关系。关系正在运行,但查询使用的是完全限定的模型名称。

overrode dispatchKeyEvent

关系在用户模型上设置:

select * from `contact_info` 
where `contact_info`.`entity_id` = '25'
and `contact_info`.`entity_id` is not null 
and `contact_info`.`entity_type` = 'App\Modules\User\Model\User' 
limit 1

和ContactInfo模型:

/**
 * @description Method handles polymorphic contact relationship.
 * @return \Illuminate\Database\Eloquent\Relations\MorphOne
 */
public function contact()
{
    return $this->morphOne('App\Modules\Common\ContactInfo', 'entity');
}

实际表的值设置为'用户','租户'和'推荐人'而不是模型名称/名称空间。我找到了一些关于关系图的信息,但不知道这是否能在这里解决我的问题。

基本上我需要找出如何在数据库中告诉代码/** * @description Method establishes polymorphic relationship (tenant/user). * @return \Illuminate\Database\Eloquent\Relations\MorphTo */ public function entity() { return $this->morphTo(); } 应该是'App\Modules\User\Model\User'

1 个答案:

答案 0 :(得分:0)

MorphMaps是要走的路。我将此添加到我的AppServiceProvider启动方法中,它开始按预期提取数据:

use App\Modules\User;
use App\Modules\Tenant
Relation::morphMap([
    'user' => User::class,
    'tenant' => Tenant::class
]);

现在查询:

select * from `contact_info`
where `contact_info`.`entity_id` = '25'
and `contact_info`.`entity_id` is not null
and `contact_info`.`entity_type` = 'user' limit 1

article给了我极大的帮助。