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

时间:2016-11-18 17:06:00

标签: php laravel eloquent laravel-5.2 query-builder

我在使用查询构建器时遇到问题,这些构建器在路径文件中使用post()时给出了未定义的方法错误。

通常我使用

的返回
User::find($id)->post; 

但是当我将post作为一个函数调用时,它不起作用并给我:

  

调用未定义的方法Illuminate \ 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();    

  });

3 个答案:

答案 0 :(得分:2)

User类中的post()方法需要公开。现在它受到保护,这意味着外面的课程无法访问它。

答案 1 :(得分:2)

  

User类中的post()方法需要公开。现在它受到保护,这意味着外面的课程无法访问它。   〜@ jackel414

正如Jackel414所述,您的post()功能受到保护,需要公开才能访问它。

我注意到您在一对一的关系中运行get()函数,此函数旨在恢复数据集合,除非您将id作为参数传递,它是&#39;使用以下示例的最佳做法:

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

或者

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

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

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

答案 2 :(得分:0)

试试这个:

<强>路线

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

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

});