我正在尝试通过我的用户模型访问ProfileType,即$ user-> profile-> profiletype;但是,我无法检索到某个对象。基本上,用户有一个配置文件,配置文件属于用户和配置文件类型。 ProfileType有很多个人资料。
我的表名是users,profiles和profile_types。
use Cartalyst\Sentry\Users\Eloquent\User as SentryUserModel;
class User extends SentryUserModel {
/**
* Indicates if the model should soft delete.
*
* @var bool
*/
protected $softDelete = true;
public function profile()
{
return $this->hasOne('Profile');
}
}
class Profile extends Eloquent {
protected $fillable = array('username', 'slug', 'completed');
/**
* @return
*/
public function user()
{
return $this->belongsTo('User');
}
public function profiletype()
{
return $this->belongsTo('ProfileType');
}
}
class ProfileType extends Eloquent {
/**
* @return
*/
public function profiles()
{
return $this->hasMany('Profile');
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
// profile_types table
class CreateProfileTypesTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('profile_types', function(Blueprint $table) {
$table->integer('id', true);
$table->string('name');
$table->string('slug');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('profile_types');
}
}
// profiles table
class CreateProfilesTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('profiles', function(Blueprint $table) {
$table->integer('id', true);
$table->string('username');
$table->string('slug');
$table->boolean('completed');
$table->integer('user_id');
$table->integer('profile_type_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('profiles');
}
}
答案 0 :(得分:1)
我想你可能发现了Laravel处理外键的方式的错误。它应该知道profile_types
的外键是profile_type_id
,但实际上它正在寻找profiletype_id
。
因此,您可以更改表格中的该列,这样您就不必担心每次在该表格上需要其他关系时发送额外的参数,或者在Profile
模型中,您可以使用此功能像这样...
function profiletype
{
return $this->belongsTo('ProfileType', 'profile_type_id');
}
然后您应该能够找到用户的个人资料类型...
$user = User::find(1);
echo $user->profile->profiletype->name;
echo $user->profile->profiletype->slug;