创建动态模型关系

时间:2014-12-06 08:18:52

标签: php laravel eloquent

我有三个模型User.php,Profile.php,CorporateProfile.php,并尝试根据用户模型的属性在User,profile,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');
                }
            }
}

适用于type = 1但不适用于type = 2的用户模型。 我怎样才能正常工作

1 个答案:

答案 0 :(得分:0)

也许这应该有用,但与1的比较是 truthy 比较吗?

因此,如果$this->type不是int类型,而是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');
}

(多态关系也是一种安全的选择。)