【问题标题】:laravel get error of Call to a member function prepare() on nulllaravel 在 null 上获取调用成员函数 prepare() 的错误
【发布时间】:2019-07-29 05:39:11
【问题描述】:

在 Laravel 中,我在我的 MongoDB 数据库中插入一条记录时遇到了这个错误。

在 null 上调用成员函数 prepare()

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'
  ];
}

【问题讨论】:

    标签: laravel mongodb eloquent jenssegers-mongodb


    【解决方案1】:

    在您的模型中,您写的是 protected $collection 而不是 protected $table

    顺便说一句,这可能与您的错误没有联系,但是您在 $fillable 属性中写了 parmanentAddress 而不是 permanentAddress。这可能会引发其他错误,因为您也在控制器中更新此字段。

    固定员工模型

    <?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。 @P.Ellul
    • 糟糕,我没有意识到您正在扩展原始模型以外的其他内容。
    • 告诉你答案。我为此道歉。
    【解决方案2】:

    确定

    • 该集合存在于数据库中
    • 您的模型扩展了 Jenssegers\Mongodb\Eloquent\Model 而不是 Model

      使用 Jenssegers\Mongodb\Eloquent\Model 作为 Eloquent;

      类节点扩展了 Eloquent { }

    【讨论】:

      【解决方案3】:

      如果使用jenssegers/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 { ... }
      

      如果根据文档正确配置了其他所有内容(守卫等),它应该可以正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-22
        • 2020-03-11
        • 1970-01-01
        • 2016-09-11
        • 2018-01-12
        • 1970-01-01
        相关资源
        最近更新 更多