PHP Lumen调用空值的成员函数connection()

46

在尝试在Lumen中使用Eloquent模型时,我遇到了这个错误。

调用空值上的成员函数connection()

控制器函数:

/**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {

        $employees = Employee::orderBy('first_name', 'asc')->get();
dd($employees);

        $response['precontent'] = view('admin::employee.search')->render();

        $response['content'] = view('admin::employee.index')
            ->with(['employees' => $employees])
            ->render();

        $response['title'] = 'Employees';

        return $response; 

    }

模型:

    <?php
    namespace App;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model 
{

    protected $table = 'system_core.employees';

    protected $fillable = [
        'user_id',
        'first_name',
        'last_name',
        'position',
        'primary_address',
        'secondary_address',
        'phone_1',
        'phone_2',
        'birth_date',
        'start_date',
        'end_date'
    ];

}

我对Laravel相当有经验,但刚开始我的第一个Lumen项目用于仅仅API使用,我不确定为什么会出现这个错误。也许只是我的连接设置问题?所有查询是否都必须以以下方式运行?:

$results = app('db')->select("SELECT * FROM users");

谢谢!

7个回答

146

5
你还需要取消注释之前的那一行代码($app->withFacades();,因为Eloquent确实使用了Facades)。 - Marc Brillault

19
你必须:
  1. 通过例如PHPMyAdmin手动创建数据库;
  2. .env文件中配置数据库连接(即设置DB_CONNECTIONDB_DATABASEDB_USERNAMEDB_PASSWORD);
  3. 根据上述答案,在bootstrap/app.php文件中取消注释$app->withFacades();$app->withEloquent();行;
  4. 如果您在PHPUnit测试中使用Eloquent模型,您必须首先启动Lumen(或Laravel),方法是将以下行添加到您的测试类的setUp()方法
    parent::setUp()
    

9
bootstrap/app.php,然后取消注释。
$app->withEloquent();

3

我认为你只需要在bootstrap/app.php文件中取消注释$app->withFacades();$app->withEloquent();这两行代码,然后再测试一遍即可。

对我而言,这个方法有效。


2
另一个此错误较少见的原因是在 eloquent 模型准备好之前就尝试访问它,例如在 Job 的构造函数中或者是 app/Console/Kernel.php 中进行访问。
如果是这种情况,请尝试使用以下方法。
use Illuminate\Support\Facades\DB;

$model =  DB::table('table_name')
            ->where('field_name', 'field_value')->first()

这是我面对的,谢谢 (y) - Mohamed Naser

1

我尝试了不同的解决方案,但问题似乎非常简单。

composer du

对我来说有效。


-1
打开bootstrap/app.php文件
然后取消注释
$app->withEloquent();

工作对我有效!

你的回答可以通过提供更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人能够确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接