Laravel Polymorphic Relation无效

时间:2015-01-06 16:36:09

标签: laravel laravel-4 polymorphism relationship

尝试在laravel 4中使用一些多态关系。

我有一个CoreUserAccount表,如下所示:

  

core_user_account:

     

ID

     

PROFILE_ID

     

其他专栏

然后我有另外两个表core_user_client_profile和core_user_consultant_profile。他们都有id字段。

我试图将它们联系起来:

在CoreUserAccount模型中:

public function profile()
{
    return $this->morphTo();
}

在其他表格中我都有:

public function user()
{
    return $this->morphOne('CoreUserAccount', 'profile');
}

但我似乎无法通过用户对象获取任何配置文件数据。有什么想法吗?

干杯

修改

这是我的core_user_account表:

core_user_account

以下是我的两个不同的配置文件类型表core_user_client_profile和core_user_consultant_profile:

Consultant

Client

这是我的core_user_account模型:

    <?php

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;

class CoreUserAccount
    extends Eloquent
    implements UserInterface, RemindableInterface
{
    protected $table = 'core_user_account';
    protected $hidden = array('password');
    protected $guarded = array('id', 'password');

    public function profileType()
    {
        return $this->belongsTo('CoreUserProfileType');
    }

    public function address()
    {
        return $this->belongsTo('CoreUserAddress', 'user_account_id', 'id');
    }

    public function profile()
    {
        return $this->morphTo();
    }

    public function getAuthIdentifier() {
        return $this->getKey();
    }

    public function getAuthPassword() {
        return $this->password;
    }

    public function getReminderEmail() {
        return $this->email;
    }

    public function getRememberToken() {
        return $this->remember_token;
    }

    public function setRememberToken($value) {
        $this->remember_token = $value;
    }

    public function getRememberTokenName() {
        return 'remember_token';
    }
}

我的core_user_client_profile模型:

class CoreUserClientProfile
    extends Eloquent
{
    protected $table = 'core_user_client_profile';

    public function profileLanguage()
    {
        return $this->belongsTo('CoreUserProfileLanguages');
    }

    public function user()
    {
        return $this->morphOne('CoreUserAccount', 'profile',null,'profile_id',null);
    }
}

我的core_user_consultant_profile模型:

class CoreUserConsultantProfile
    extends Eloquent
{
    protected $table = 'core_user_consultant_profile';

    public function profileLanguage()
    {
        return $this->belongsTo('CoreUserProfileLanguages', 'consultant_profile_id', 'id');
    }

    public function qualifications()
    {
        return $this->belongsTo('CoreUserConsultantQualifications', 'profile_id', 'id');
    }

    public function registration()
    {
        return $this->belongsTo('CoreUserConsultantRegistrations', 'profile_id', 'id');
    }

    public function specialities()
    {
        return $this->belongsTo('CoreUserConsultantProfileSpeciality', 'profile_id', 'id');
    }

    public function user()
    {
        return $this->morphOne('CoreUserAccount', 'profile');
    }
}

我已阅读下面评论中指出的文件,并了解我似乎必须在我的数据库中有一个类型列。但是这里需要存储哪些数据?是自动存储还是必须存储?

干杯

1 个答案:

答案 0 :(得分:1)

您必须拥有profile_type和profile_id列。在profile_type中将存储值:'CoreUserConsultantProfile'或'CoreUserClientProfile'。保存数据时,将自动填充此字段。

这是如何以多态关系保存数据的示例。

$profile = CoreUserConsultantProfile::find(1);
$account = new CoreUserAccount();

$profile->profile()->save($account);

现在,profile_id = 1,profile_type ='CoreUserConsultantProfile'