Laravel 尝试获取非对象的属性 'project_name'。
Laravel 尝试获取非对象的属性 'project_name'。
我对Laravel还很新,只是想指出一下。我在读取我的展示页面时遇到了问题,当我打开展示页面(show.blade.php)时,返回了以下错误:
试图获取非对象的属性'project_name'(视图:C:\Server\data\htdocs\ProjectCMS\resources\views\project\show.blade.php)。
我不知道我做错了什么,因为我已经让它起作用了,但是一旦我再次打开展示页面,就会返回这个错误。
任何帮助将不胜感激!
ProjectController.php:
public function show($id) { $user_id = auth()->user()->id; $project = Project::where('user_id', $user_id)->first(); $projectitem = Projectitem::where('project_id', $id)->first(); return view('project.show', [ 'project' => $project, 'projectitem' => $projectitem, ]); }
web.php路由
Route::get('/projects/{id}', 'ProjectController@show');
show.blade.php:
@extends('layouts.app') @section('content'){{$projectitem->project_name}}
Beschrijving:
{!!$projectitem->description!!}Tijdsduur(in uren): {{$projectitem->time_span}} Uren
Opdrachtgever: {{$projectitem->client}}
Text verslag:
{!!$projectitem->text_report!!}Foto's vooraf:
{!!$projectitem->images_before!!}Foto's achteraf:
{!!$projectitem->images_after!!}Beschikbaar op:
Facebook: facebook == 1){echo "wel";}else{echo "niet";}?>
Instagram: instagram == 1){echo "wel";}else{echo "niet";}?>
Linkedin: linkedin == 1){echo "wel";}else{echo "niet";}?>
Website: website == 1){echo "wel";}else{echo "niet";}?>
Aangemaakt door: {{$projectitem->created_by}}
Aangemaakt op: {{$projectitem->created_at}}
Laatst gewijzigd op: {{$projectitem->updated_at}}
@endsection
Projectitem.php(模型)
namespace App; use Illuminate\Database\Eloquent\Model; class Projectitem extends Model { protected $table = "project_item"; function project(){ return $this->belongsTo('App\Project'); } }
Project.php(模型)
hasMany('App\Projectitem'); } }
migration projectitem表
public function up() { Schema::create('project_item', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('project_name'); $table->string('client'); $table->text('description'); $table->float('time_span'); $table->text('text_report'); $table->text('images_before'); $table->text('images_after'); $table->boolean('facebook'); $table->boolean('instagram'); $table->boolean('linkedin'); $table->boolean('website'); $table->integer('belongs_to'); $table->string('created_by'); $table->timestamps(); }); }
问题出现的原因是尝试获取一个非对象的属性。解决方法是使用`findOrFail()`或`firstOrFail()`进行更好的检查。代码示例:
$project = Project::where('user_id', $user_id)->firstOrFail(); $projectitem = Projectitem::where('project_id', $id)->firstOrFail();
可以使用如下代码进行进一步检查:
if (!is_null($project)) { // View } else { // Do something }
参考链接:[What is the difference between find(), findOrFail(), first(), firstOrFail(), get(), list(), toArray()](https://stackoverflow.com/questions/33027047)
在Laravel中出现了一个错误"trying to get property 'project_name' of non-object",出现这个错误的原因是在blade模板中的代码中使用了错误的语法。具体来说,错误的代码是`$projectitem[' project_name'];`。这段代码试图获取`$projectitem`对象的`project_name`属性,但是由于代码中的空格导致了语法错误。
为了解决这个问题,我们需要将代码修改为正确的语法。首先,如果出现"undefined index"的错误,我们可以在获取属性之前先确定索引的位置,例如`$projectitem[0]['project_name'];`。这样做可以确保我们在获取属性时不会遇到索引不存在的问题。
此外,我们还需要注意到代码中的空格错误。在获取属性时,应该去掉属性名前后的空格,正确的写法应该是`$projectitem['project_name'];`。
要解决这个问题,我们需要修复代码中的语法错误和空格错误。具体来说,我们应该使用正确的语法`$projectitem['project_name'];`来获取`$projectitem`对象的`project_name`属性。这样就能够避免出现"trying to get property 'project_name' of non-object"的错误。
Laravel尝试获取非对象的属性'project_name'的问题可能是由于以下原因导致的:在数据库中没有Projectitem
模型的记录,这意味着没有找到符合您指定的条件的结果。
要解决这个问题,您可以进行以下操作:
1. 确保数据库中存在Projectitem
模型的记录。
2. 检查您的查询条件是否正确,确保它们与数据库中的记录匹配。
3. 如果您使用的是关联模型,确保关联关系正确设置,并且相关模型也存在相应的记录。
4. 确认您的数据库连接是否正确配置,并且数据库服务器正在运行。
通过检查数据库记录的存在性、查询条件的准确性以及相关模型和数据库连接的配置,您可以解决Laravel尝试获取非对象的属性'project_name'的问题。