Вызов неопределенного метода IlluminateDatabaseQueryBuilder::post()


У меня проблема с использованием построителей запросов, которые выдают мне ошибку неопределенного метода для использования post() в файле маршрутов.

Обычно я использую возврат

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

Но когда я вызываю post как функцию, она не работает и дает мне:

Вызов неопределенного метода Illuminate\База данных\Запрос\Конструктор::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();    

  });
Author: Katie, 2016-11-18

3 answers

Метод post() в вашем пользовательском классе должен быть общедоступным. Прямо сейчас он защищен, что означает, что внешние классы не могут получить к нему доступ. ~ @jackel414

Как упоминал Jackel414, ваша функция post() защищена и должна быть общедоступной, чтобы вы могли получить к ней доступ.

Я заметил, что вы используете функцию get() для связи один к одному, эта функция предназначена для возврата коллекции данных, если вы не передадите идентификатор в качестве параметра, лучше всего использовать примеры ниже:

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

Или

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

В качестве альтернативы вы можете вернуть конструктор, чтобы еще больше расширить свои запросы.

return User::find($id)->post();
 1
Author: Mathew Berry, 2016-11-18 23:37:11

Метод post() в вашем пользовательском классе должен быть общедоступным. Прямо сейчас он защищен, что означает, что внешние классы не могут получить к нему доступ.

 2
Author: jackel414, 2016-11-18 18:39:29

Попробуйте это:

Маршруты

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

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

});
 0
Author: shinigamicorei7, 2016-11-18 17:16:25