Laravel 5.6 - “试图获取非对象的属性”

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/50484593/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 17:44:24  来源:igfitidea点击:

Laravel 5.6 - "Trying to get property of non-object"

phplaravel

提问by jproux

I'm running a test in my controller just to make sure I get a output. Unfortunately, I get a "Trying to get property of non-object" error. I just want to see the name field displayed as per code below.

我在我的控制器中运行测试只是为了确保我得到一个输出。不幸的是,我收到“试图获取非对象的属性”错误。我只想看到按照下面的代码显示的名称字段。

Here's my Model (Member.php):

这是我的模型(Member.php):

namespace App;

use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
    //
}

Here's my MemberController.php file:

这是我的 MemberController.php 文件:

public function show($id)
    {
        $data = array();
        $data['id'] = $id;
        $member = Member::find('$id'); 

        //Test
        echo $member->name;
        exit;

        return view('members/show', $data); 
    }

This is my Route:

这是我的路线:

Route::get('members/{member}', 'MemberController@show');

This is my schema where the table is named members and the name field is defined: enter image description here

这是我的架构,其中表被命名为 members 并且定义了 name 字段: 在此处输入图片说明

Like I said, when I run my url at Some_url/members/1 I get a "Trying to get property of non-object" error

就像我说的,当我在 Some_url/members/1 运行我的 url 时,我收到“试图获取非对象的属性”错误

Where am I going wrong?

我哪里错了?

回答by Loek

$member = Member::find('$id'); 

This line is the culprit.

这条线是罪魁祸首。

Change it to:

将其更改为:

$member = Member::find($id);

Reasons should be obvious ;)

原因应该很明显;)

回答by Rowel Abenio

Also don't include 'exit' before 'return'. It won't show the view if you do it like that.

也不要在“返回”之前包含“退出”。如果你这样做,它不会显示视图。

回答by Afsal

$member = Member::findOrFail($id);

OR

$member = Member::find($id);

$member = Member::findOrFail($id);

或者

$member = Member::find($id);

when you use a variable as a parameter don't use in quotes

当您使用变量作为参数时,不要在引号中使用

回答by Paul Androshchuk

Try-out Route Model Binding. Does it look clearer?

试用路由模型绑定。看起来是不是更清晰了?

public function show(Member $member)
{
    return view('members/show', ['id' => $member->getKey()]); 
}