Php 调用未定义的方法illumb\Database\Query\Builder::post()

Php 调用未定义的方法illumb\Database\Query\Builder::post(),php,laravel,eloquent,laravel-5.2,query-builder,Php,Laravel,Eloquent,Laravel 5.2,Query Builder,我在使用查询生成器时遇到了一个问题,查询生成器在路由文件中使用post()时会出现未定义的方法错误 通常我使用的是 User::find($id)->post; 但当我调用post作为函数时,它不起作用,并给出: 调用未定义的方法illumb\Database\Query\Builder::post() 用户模型 <?php namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; clas

我在使用查询生成器时遇到了一个问题,查询生成器在路由文件中使用
post()
时会出现未定义的方法错误

通常我使用的是

User::find($id)->post; 
但当我调用
post
作为函数时,它不起作用,并给出:

调用未定义的方法illumb\Database\Query\Builder::post()

用户模型

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{


  protected $fillable = [
    'name', 'email', 'password',
 ];

 protected $hidden = [
     'password', 'remember_token',
 ];


 protected function post()
 {       
     return $this->hasOne('App\Post');  
 }

 }
  Route::get('/', function () {
  return view('welcome');
  });



  Route::get('/user/{id}/post',function($id){

  return User::find($id)->post()->get();    

  });
试试这个:

路线

  Route::get('/', function () {
  return view('welcome');
  });



  Route::get('/user/{id}/post',function($id){

  return User::find($id)->post()->get();    

  });
Route::get('/user/{id}/post',function($id){

   return User::with('post')->find($id);    

});
用户类中的
post()
方法必须是公共的。现在它是受保护的,这意味着外部类无法访问它

用户类中的post()方法必须是公共的。现在它是受保护的,这意味着外部类无法访问它。 ~@jackel414

正如Jackel414所提到的,您的
post()
函数受到保护,需要公开才能访问

我注意到您正在一对一关系上运行
get()
函数,此函数旨在返回数据集合,除非您将id作为参数传递,否则最好使用以下示例:

return User::find($id)->post;
return User::find($id)->post();

或者,您可以将构建器带回以进一步扩展查询