2014-12-06 123 views
0

我有三個模型User.php,Profile.php,CorporateProfile.php並試圖根據用戶模型的屬性創建用戶,配置文件,corporateprofile模型之間的動態關係。 我的繼承人爲用戶模型創建動態模型關係

<?php 

     use Cartalyst\Sentry\Users\Eloquent\User as SentryModel; 

     class User extends SentryModel 
     { 
      protected $with = array('groups'); 

      public function profile() 
      { 
       if($this->type == 1) { 
        return $this->hasOne('\K1\Data\Models\Profile','user_id'); 
       } 
       elseif($this->type == 2) { 
        return $this->hasOne('\K1\Data\Models\CorporateProfile', 'user_id'); 
       } 
      } 
} 

它的工作原理與類型= 1用戶模型,但不適用於type = 2 我怎樣才能得到這個工作正常

+0

閱讀尖端這http://laravel.com/docs/4.2/eloquent#polymorphic-relations – 2014-12-06 11:58:37

+0

好,謝謝 – MrFoh 2014-12-06 12:05:18

回答

0

也許這應該工作的代碼,但是比較1truthy的比較?

所以,如果$this->typeint型的,而是string(因爲有時MySQL的只是做這些事情...),然後第一if只檢查是否存在字符串(是真的)。所以,你想要的是

if((int) $this->type === 1) { 
    return $this->hasOne('\K1\Data\Models\Profile','user_id'); 
} 
elseif((int) $this->type === 2) { 
    return $this->hasOne('\K1\Data\Models\CorporateProfile', 'user_id'); 
} 

(多形性關係也是一個安全的賭注。)