我在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'
。
答案 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给了我极大的帮助。