奇怪的问题:试图在 Laravel Blade 中获取 属性 'name' of non-object
Weird Problem: Trying to get property 'name' of non-object in Laravel Blade
我有四个表:用户、国家、地区和乡镇。
在User.php模型中,
public function country() {
return $this->belongsTo(Country::class, 'country_id');
}
public function region() {
return $this->belongsTo(Region::class, 'region_id');
}
public function township() {
return $this->belongsTo(Township::class, 'township_id');
}
在 Country.php、Region.php 和 Township.php 模型中,
public function users() {
return $this->hasMany(User::class);
}
在users.blade中,我尝试打印用户的位置
{{ $user->township->name }}, {{ $user->region->name }}, {{ $user->country->name }}
而且,我遇到了 Trying to get property 'name' of non-object
异常。
当我尝试像 {{ $user->township->name }}, {{ $user->region->name }}, {{ $user->country->name }}
一样打印 country
、region
和 township
时,它打印如下 -
{"id":1,"region_id":1,"name":"Hlaing"}, {"id":1,"country_id":1,"name":"Yangon"}, {"id":1,"name":"Myanmar"}
只在远程服务器上出现这个异常,在本地机器上没有问题。
我有所有用户、已批准用户和待定用户的三个视图。我有 users.blade.php、users_approved.blade.php 和 users_pending.blade.php。这些刀片相似,只有标题文本不同。在已批准的用户视图中没有问题(远程服务器也一样)。
在MainController.php中,我有那些函数-
function users(Request $request) {
$users = User::all();
return view('users', [ 'users' => $users ]);
}
function users_approved(Request $request) {
$users = User::where('approval_status', 'APPROVED')->get();
return view('users_approved', [ 'users' => $users ]);
}
function users_pending(Request $request) {
$users = User::where('approval_status', 'PENDING')->get();
return view('users_pending', [ 'users' => $users ]);
}
我已经试过了 - php artisan view:clear
, php artisan cache:clear
, php artisan config:clear
.
如果您的问题只发生在远程机器上,可能是因为那里存储的数据不同。特别是对于某些用户,由于某些原因(遗留记录、代码错误、未使用事务...等),他们的某些关系可能只是未设置。
Eloquent docpage itself 上建议的一种解决方法是为那些绑定模型提供默认值,当数据库中缺少关系时使用。例如:
public function country() {
return $this->belongsTo(Country::class, 'country_id')->withDefault([
'name' => 'Country Not Set',
])
}
public function region() {
return $this->belongsTo(Region::class, 'region_id')->withDefault([
'name' => 'Region Not Set',
])
}
... 等。另一种选择是 运行 数据库查询,以获取具有以下条件的远程加工中的所有用户:
WHERE country_id IS NULL
OR region_id IS NULL
OR township_id IS NULL
根据您的需要,您可以修改这些记录或以某种方式禁用它们。
我有四个表:用户、国家、地区和乡镇。
在User.php模型中,
public function country() {
return $this->belongsTo(Country::class, 'country_id');
}
public function region() {
return $this->belongsTo(Region::class, 'region_id');
}
public function township() {
return $this->belongsTo(Township::class, 'township_id');
}
在 Country.php、Region.php 和 Township.php 模型中,
public function users() {
return $this->hasMany(User::class);
}
在users.blade中,我尝试打印用户的位置
{{ $user->township->name }}, {{ $user->region->name }}, {{ $user->country->name }}
而且,我遇到了 Trying to get property 'name' of non-object
异常。
当我尝试像 {{ $user->township->name }}, {{ $user->region->name }}, {{ $user->country->name }}
一样打印 country
、region
和 township
时,它打印如下 -
{"id":1,"region_id":1,"name":"Hlaing"}, {"id":1,"country_id":1,"name":"Yangon"}, {"id":1,"name":"Myanmar"}
只在远程服务器上出现这个异常,在本地机器上没有问题。
我有所有用户、已批准用户和待定用户的三个视图。我有 users.blade.php、users_approved.blade.php 和 users_pending.blade.php。这些刀片相似,只有标题文本不同。在已批准的用户视图中没有问题(远程服务器也一样)。
在MainController.php中,我有那些函数-
function users(Request $request) {
$users = User::all();
return view('users', [ 'users' => $users ]);
}
function users_approved(Request $request) {
$users = User::where('approval_status', 'APPROVED')->get();
return view('users_approved', [ 'users' => $users ]);
}
function users_pending(Request $request) {
$users = User::where('approval_status', 'PENDING')->get();
return view('users_pending', [ 'users' => $users ]);
}
我已经试过了 - php artisan view:clear
, php artisan cache:clear
, php artisan config:clear
.
如果您的问题只发生在远程机器上,可能是因为那里存储的数据不同。特别是对于某些用户,由于某些原因(遗留记录、代码错误、未使用事务...等),他们的某些关系可能只是未设置。
Eloquent docpage itself 上建议的一种解决方法是为那些绑定模型提供默认值,当数据库中缺少关系时使用。例如:
public function country() {
return $this->belongsTo(Country::class, 'country_id')->withDefault([
'name' => 'Country Not Set',
])
}
public function region() {
return $this->belongsTo(Region::class, 'region_id')->withDefault([
'name' => 'Region Not Set',
])
}
... 等。另一种选择是 运行 数据库查询,以获取具有以下条件的远程加工中的所有用户:
WHERE country_id IS NULL
OR region_id IS NULL
OR township_id IS NULL
根据您的需要,您可以修改这些记录或以某种方式禁用它们。