我有三个模型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的用户模型。 我怎样才能正常工作
答案 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');
}
(多态关系也是一种安全的选择。)