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'
试图让一些多态关系在 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'