Вызов неопределенного метода 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();
});
3 answers
Метод post() в вашем пользовательском классе должен быть общедоступным. Прямо сейчас он защищен, что означает, что внешние классы не могут получить к нему доступ. ~ @jackel414
Как упоминал Jackel414, ваша функция post()
защищена и должна быть общедоступной, чтобы вы могли получить к ней доступ.
Я заметил, что вы используете функцию get()
для связи один к одному, эта функция предназначена для возврата коллекции данных, если вы не передадите идентификатор в качестве параметра, лучше всего использовать примеры ниже:
return User::find($id)->post;
Или
return User::with('post')->find($id);
В качестве альтернативы вы можете вернуть конструктор, чтобы еще больше расширить свои запросы.
return User::find($id)->post();
Метод post()
в вашем пользовательском классе должен быть общедоступным. Прямо сейчас он защищен, что означает, что внешние классы не могут получить к нему доступ.
Попробуйте это:
Маршруты
Route::get('/user/{id}/post',function($id){
return User::with('post')->find($id);
});