我已经有很长一段时间没有和Laravel合作了,现在我正试图回来,正在做一个项目,但我对通过一对多关系检索数据感到困惑。
在用户模型中:
public function blackboard()
{
return $this->hasMany(Blackboard::class);
}在黑板模型中:
public function user()
{
return $this->belongsTo(User::class);
}在控制器中:
public function index()
{
$blackboard = Blackboard::all();
return view('home', ['blackboards' => $blackboard]);
}在视图中:
<ul class="list-group">
@foreach($blackboards as $blackboard)
<li>{{ $blackboard->user->name }}</li>
@endforeach
</ul>在黑板迁移中:
Schema::create('blackboards', function (Blueprint $table)
{
$table->bigIncrements('id');
$table->text('title')->nullable(); //Need to take out
$table->text('content')->nullable(); //Need to take out
$table->unsignedBigInteger('created_by');
$table->timestamps();
$table->foreign('created_by')
->references('id')
->on('users')
->onDelete('cascade');
});在用户迁移中
Schema::create('users', function (Blueprint $table)
{
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});不知何故,它不能让我通过黑板数据显示用户信息,我得到了如下错误:
Trying to get property 'name' of non-object (View: /var/www/html/intranet/resources/views/home.blade.php)发布于 2020-09-13 02:36:42
在你的Blackboard模型中:
public function user()
{
return $this->belongsTo(User::class, 'created_by', 'id');
}如果你也想让反向关系起作用,在你的User模式中:
public function blackboard()
{
return $this->hasMany(Blackboard::class, 'created_by', 'id');
}别忘了在到达视图之前在Controller中加载用户,这将提高性能:
public function index()
{
$blackboard = Blackboard::with(['user'])->get();
return view('home', ['blackboards' => $blackboard]);
}发布于 2020-09-13 02:35:31
我认为您所要做的就是提供外键名称,只有在遵循laravel约定的情况下才能省略它(如果您将其命名为user_id):
在用户模型中:
public function blackboard(){
return $this->hasMany(Blackboard::class,'created_by');
}在黑板模型中:
public function user(){
return $this->belongsTo(User::class,'created_by');
}https://stackoverflow.com/questions/63863579
复制相似问题