试图获得非对象Laravel的属性

时间:2017-10-04 01:32:24

标签: php laravel

所以,我已经创建了一个控制器来在我的应用程序中添加主题,并将其存储在数据库中。唯一的问题是,当我显示一个视图时,它给了我ErrorException。

这是主题控制器

 public function store(Request $request)
{
    $users = User::all();

    $userid = Auth::user()->id;

    $topic = new Topic([
      'user_id' => $userid,
      'title' => $request->get('title'),
      'description' => $request->get('description'),
      'tags' => $request->get('tags')
    ]);

    $topic->save();


    //Creating a loop for each user, send a notification.
     $message_content = "The " . Auth::user()->first_name . " " . Auth::user()->last_name . " just added a new topic. \n " . $topic->title . " \n ";

        foreach ( $users as $user ) {

            mail( $user->email, 'New Topic!', $message_content);
        }

    return redirect('/topics')->with('topics', $topics);



}

这是视图

@foreach($topics as $topic)
    <div class="col-lg-4 col-md-6">
      <div class="widget widget-shadow">
        <div class="widget-content padding-20 bg-green-500 white height-full">

          <a class="avatar pull-left margin-right-20" href="javascript:void(0)">
            <img src=" {{URL::to('uploads')}}/{{ $topic->creator->image }} " alt=" ">
          </a>
          <div style="overflow:hidden;">
            <small class="pull-right grey-200">{{$topic['created_at']}}</small>
            <div class="font-size-18"> {{$topic->creator->first_name}}  {{$topic->creator->last_name}}</div>
            <div class="grey-200 font-size-14 margin-bottom-10">{{$topic->creator->role}}</div>
            <blockquote class="cover-quote font-size-16 white">{{$topic['title']}}
            </blockquote>
          </div>

        </div>
      </div>
    </div>
    @endforeach

这是主题模型

class Topic extends Model

public $fillable = ['title', 'user_id', 'description', 'tags'];

public function creator() {
    return $this->belongsTo( User::class, 'user_id', 'id');

这是用户模型(仅与主题模型的关系)

public function hasTopic() {
    return $this->hasMany( Topic::class, 'id', 'user_id' );
}

最后这里是获取主题数据并显示视图的控制器

public function sdp()
{

    $topics = Topic::all();

    $users = User::with([ 'hasTopic' => function ($query) {
        $query->where('id', 'user_id');

    }]);


    return view('topics.student', ['topics' => $topics, 'users' => $users] );

}

2 个答案:

答案 0 :(得分:0)

您没有通过重定向

传递$topic变量
return redirect('/topics')->with('topics', $topics);

更新1: 你能尝试这样吗

$topic->created_at

而不是像$topic中的对象那样使用like数组,而不是数组。

$topic['created_at']

Read more

答案 1 :(得分:0)

由于错误表明您正在尝试获取null对象的属性。

我不清楚它是什么对象,因为我没有看到堆栈跟踪或文件的内容。但正如它的观点(/home/118696.cloudwaysapps.com/fwzyssdrmj/public_html/storag e / framework / views / 7b fce097aa53fc730f 134b 425d87dd73f09b d893.p hp)我假设可能是主题的创建者设置为null,但您尝试访问该null对象的属性。当你用user_id保存主题时,假设用户已登录并具有id但它为null。稍后你试图访问那个主题上的user_id的空对象($ topic-&gt; creator)。检查该字段是否可以为空?如果是,请检查是否存在user_id为null的主题。