通过laravel中的模型绑定关系获取数据



我试图获取用户的照片src,该照片存储在photos表中,照片id存储在users'表中。我的代码-我已经在我的用户模型中写下了这些行

型号-用户

public function photo() {
return $this->belongsTo(Photo::class);
}

和我打印照片的代码src-

Route::get("/photo",function() {

$users = User::all();
foreach($users as $user) {
echo $user->photo->file . "<br>";
}
});

它显示了一个错误-尝试获取非对象的属性"file">

另一方面,我有同样的关系绑定,效果很好-在用户模型-中

public function role() {
return $this->belongsTo(Role::class);
}

以及用于打印用户的角色名称-

Route::get("/photo",function() {
$users = User::all();
foreach($users as $user) {
echo $user->role->name . "<br>";
}
});

因此,如果角色名称以这种方式打印,为什么照片src不打印

使用Model关系时,需要在User::all()->with()方法中调用它。

无论你的关系是什么,它的名字都会在with()方法中被调用,以便正确地获得所需的数据。

考虑到关系船做得很好,你可以这样做:

模型用户与照片有以下关系:

public function photo() {
return $this->hasMany(Photo::class);
}

模型照片与用户有以下关系。

public function user(){ 
return $this->belongsTo(User::class);
}

之后,您可以在控制器中调用它

public function get_photo(){
$users = User::all()->with('photo');
return view('example.blade.php,compact('users'));
}

路线

Route::get('/photo',[Controller::class,'get_photo'])->name('get.photo');

查看

你的视图可以有foreach循环来迭代照片

foreach($users as $user) {
echo $user->photo->file . "<br>";
}

最新更新