Laravel: нестатический метод App\Models\Employee::getEmployeeName() не должен вызываться статически, предполагая $this из несовместимого контекста

Мне нужно использовать функцию модели в контроллере, но я получаю указанную выше ошибку:

Нестатический метод 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.

ceejayoz 05.03.2019 20:27

Вы можете сделать это, например $employee=Employee::first()->getEmployeeName();

Davit 05.03.2019 20:30

Большое спасибо, Давид, сработало как шарм!

Screwtape007 05.03.2019 20:36

@Screwtape007 Пожалуйста, не используйте first(). Он получит только самого первого сотрудника в базе данных. Пожалуйста, ознакомьтесь с ответами ниже, а также прислушайтесь к совету @ceejayoz и прочитайте документы Laravel на Eloquent.

Matt K 05.03.2019 20:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
5
7 470
4

Ответы 4

попробуй это : в вашей модели

 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);

       }

Другие вопросы по теме