Мне нужно использовать функцию модели в контроллере, но я получаю указанную выше ошибку:
Нестатический метод App\Models\Employee::getEmployeeName() не должен вызываться статически, предполагая $this из несовместимого контекста
Моя модель:
<?php namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Employee extends Model
{
protected $table = ‘BLABLA’;
public function getEmployeeName()
{
if ($this->EmployeeName){
return "{$this->EmployeeName}";
}
return null;
}
}
Мой контроллер:
use Auth;
use DB;
use App\Models\Bookings;
use App\Models\User;
use App\Models\Employee;
use Illuminate\Http\Request;
class BookingsController extends Controller {
public function postBooking(Request $request){
$employee=Employee::getEmployeeName()->get();
dd($employee);
}
}
У сотрудника есть имя. У сотрудника сорт нет. Вы бы получили к нему доступ что-то вроде $employee->getEmployeeName(). Ваша статическая функция вообще не имеет функции ->get(), поэтому вам придется отказаться от нее. Скорее всего, name будет параметром из базы данных, поэтому вам не нужен Любые этого кода — $employee->name, скорее всего, будет достаточно. Вы должны перечитать документы Laravel на Eloquent.
Вы можете сделать это, например $employee=Employee::first()->getEmployeeName();
Большое спасибо, Давид, сработало как шарм!
@Screwtape007 Пожалуйста, не используйте first(). Он получит только самого первого сотрудника в базе данных. Пожалуйста, ознакомьтесь с ответами ниже, а также прислушайтесь к совету @ceejayoz и прочитайте документы Laravel на Eloquent.






попробуй это : в вашей модели
public static function getEmployeeName()
{
if ($this->EmployeeName){
return "{$this->EmployeeName}";
}
return null;
}
в вашем контроллере:
$employee=Employee::getEmployeeName();
но если EmployeeName является атрибутом, лучше сделать это:
public function getEmployeeNameAttribute()
{
if ($this->EmployeeName){return $this->EmployeeName;}
}
и в вашем контроллере:
$employees= Employee::find(x);
$employees->employee_name ;
$this имеет значение, когда ваша модель содержит записи, установленные в обоих решениях.
я надеюсь помочь вам
getEmployeeName — это метод объекта Employee. Он должен вызываться для экземпляра Employee. В вашем случае вам нужно будет получить экземпляр Employee перед вызовом этого метода. Возможно, с помощью employee_id, переданного вместе с $request.
public function postBooking(Request $request) {
$employee = Employee::findOrFail($request->input('employee_id'));
dd($employee);
}
Кроме того, на данный момент getEmployeeName не требуется, так как у вас уже есть объект Employee. Чтобы получить имя, все, что требуется, это вызвать атрибут:
$employee->name ИЛИ $employee->EmployeeName (как бы вы это ни называли)
Это сработало
$employee=Employee::first()->getEmployeeName();
Это означает определить функцию статически, добавить static после public , ниже пример
Так
public static function postBooking(Request $request){
$employee=Employee::getEmployeeName()->get();
dd($employee);
}
Возможный дубликат Сообщение об ошибке Строгие стандарты: нестатический метод не должен вызываться статически в php