我想使用属于和hasOne的关系将配置文件模型与现有用户模型相关联,而我遇到了这个错误。
这是我的Profile.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
public function user(){
return $this->belongsTo(User::class);
}
}
User.php
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Symfony\Component\HttpKernel\Profiler\Profile;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'username', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function profile()
{
return $this->hasOne(Profile::class);
}
}
在我的终端中,我可以通过个人资料吸引用户,但无法使用用户获取个人资料。这是错误
$user->profile
TypeError: Too few arguments to function Symfony/Component/HttpKernel/Profiler/Profile::__construct(), 0 passed in /Users/macair13/freeCodeGram/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php on line 720 and exactly 1 expected.
答案 0 :(得分:0)
要解决此问题,请用use Symfony\Component\HttpKernel\Profiler\Profile;
替换 User.php 文件顶部的use App\Profile;
行。
发生这种情况是因为您在User.php
文件的顶部错误地包含了错误的类。当Laravel尝试加载关系时,它会尝试构造一个Symfony\Component\HttpKernel\Profiler\Profile
对象,而不是构造您想要的模型。
答案 1 :(得分:0)
在用户模型中以如下方式使用
public function profile()
{
return $this->hasOne('App\Profile', 'foreign_key');
}
我不确定您为什么在用户模型中使用Symfony\Component\HttpKernel\Profiler\Profile
。建立关系时,它使用的是Profile
,而不是您的个人资料模型。定义关系时,必须使用Profile Model命名空间。