2017-07-07 15 views
0

私はLaravel 5.4で多型関係を設定しました。リレーションシップは機能していますが、クエリは完全修飾モデル名を使用しています。完全なモデル名を使用したLaravel Polymorphic Relation

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 

関係がユーザモデルに設定されている:

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

とのContactInfoモデル:

/** 
* @description Method establishes polymorphic relationship (tenant/user). 
* @return \Illuminate\Database\Eloquent\Relations\MorphTo 
*/ 
public function entity() 
{ 
    return $this->morphTo(); 
} 

実際のテーブルには、 'ユーザ'、 'テナント' に設定された値を有していますモデル名/名前空間の代わりに 'referrer'を使用します。私は関係マップについての情報を少し見つけましたが、ここで問題が解決するかどうかわかりません。

基本的には、'App\Modules\User\Model\User''user'であることをコードに伝える方法を見つける必要があります。

答えて

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は途方もなく私を助けました。

関連する問題