Laravel 多态关系无效

Laravel Polymorphic Relation not working

试图让一些多态关系在 laravel 4 中起作用。

我有一个 CoreUserAccount table,看起来像这样:

core_user_account:

id

profile_id

other columns

然后我还有另外 2 个 tables core_user_client_profile 和 core_user_consultant_profile。他们都有 id 字段。

我正在尝试 link 他们这样:

在 CoreUserAccount 模型中:

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

在其他两个 table 中我有:

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

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

干杯

编辑

这是我的 core_user_account table:

这是我的 2 种不同的配置文件类型 tables core_user_client_profile 和 core_user_consultant_profile:

这是我的 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');
    }
}

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

干杯

您应该有 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'