Laravel получает ошибку вызова функции-члена prepare() при нулевом значении

В Laravel я получил эту ошибку при вставке записи в мою базу данных MongoDB.

Call to a member function prepare() on null

namespace App\Http\Controllers;

use App\Employee;
use Illuminate\Http\Request;

class EmployeeController extends Controller
{

  public function create()
  {
    return view('addemployee');
  }

  public function store(Request $request)
  {
    $employee = new Employee();
    $employee->firstName = $request->get('firstName');
    $employee->middleName = $request->get('middleName');
    $employee->lastName = $request->get('lastName');
    $employee->gender = $request->get('gender');
    $employee->city = $request->get('city');
    $employee->localAddress = $request->get('localAddress');
    $employee->permanentAddress = $request->get('permanentAddress');
    $employee->emailAddress = $request->get('emailAddress');
    $employee->mobileNumber = $request->get('mobileNumber');
    $employee->email = $request->get('email');
    $employee->department = $request->get('department');
    $employee->designation = $request->get('designation');
    $employee->save();

    return redirect('addemployee')->with('Success', 'Data Inserted Successfully!');

  }
}

Это мой класс модели сотрудников:

<?php
namespace App; 
use Illuminate\Database\Eloquent\Model;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Employee extends Eloquent
{
  protected $connection = 'mongodb';
  protected $collection = 'employee';
  protected $fillable = [
    'firstName',
    'middleName',
    'lastName',
    'gender',
    'city',
    'localAddress',
    'parmanentAddress',
    'emailAddress',
    'mobileNumber',
    'email',
    'department',
    'designation'
  ];
}
Стоит ли изучать 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-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
4
0
9 089
3

Ответы 3

В вашей модели вы написали protected $collection вместо protected $table.

Кстати, это, вероятно, не связано с вашей ошибкой, но вы написали parmanentAddress вместо адрес постоянного проживания в своем свойстве $fillable. Это может вызвать другую ошибку, поскольку вы также обновляете это поле в своем контроллере.

Фиксированная модель сотрудника

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Employee extends Eloquent
{
    protected $connection = 'mongodb';

    protected $table = 'employee';

    protected $fillable = [
        'firstName',
        'middleName',
        'lastName',
        'gender',
        'city',
        'localAddress',
        'permanentAddress',
        'emailAddress',
        'mobileNumber',
        'email',
        'department',
        'designation'
    ]; 
}

Спасибо, что обратили мое внимание на мою орфографическую ошибку, но сейчас это не важно, и я использую MongoDB, поэтому это должна быть $ collection, а не $ table. @П.Эллул

John_rees 08.03.2019 05:48

К сожалению, я не понял, что вы расширяете что-то еще, кроме исходной модели.

pellul 08.03.2019 06:35

Покажи, что ты знаешь ответ. я извиняюсь за это.

John_rees 08.03.2019 06:54

Убедись

  • коллекция существует в базе данных
  • Ваша модель расширяет Jenssegers\Mongodb\Eloquent\Model, а не модель

    используйте Jenssegers\Mongodb\Eloquent\Model как Eloquent;

    класс Node расширяет Eloquent { }

Это должно решить проблему при использовании пакета Йенссегерс/laravel-mongodb:

В config/auth убедитесь, что значение model правильно установлено если не используется расположение модели по умолчанию User:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User\User::class,
    ],

Затем ваш класс модели User должен правильно расширяться Authenticable (из пакета):

use Jenssegers\Mongodb\Auth\User as Authenticatable;
...
class User extends Authenticatable implements JWTSubject { ... }

Если все остальное (защита и т. д.) было настроено правильно в соответствии с документами, все должно работать без проблем.

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