在 Slim 中使用 Eloquent

在 Slim 中使用 Eloquent

你可以使用 Eloquent 这种数据库 ORM 将你的 Slim 应用程序连接到数据库。

为你的应用程序添加 Eloquent

composer require illuminate/database "~5.1"

Figure 1: Add Eloquent to your application.

配置 Eloquent

在 Slim 的 setting 数组中添加数据库设置项。

<?php
return [
    "settings" => [
        // Slim Settings
        "determineRouteBeforeAppMiddleware" => false,
        "displayErrorDetails" => true,
        "db" => [
            "driver" => "mysql",
            "host" => "localhost",
            "database" => "database",
            "username" => "user",
            "password" => "password",
            "charset"   => "utf8",
            "collation" => "utf8_unicode_ci",
            "prefix"    => "",
        ]
    ],
];

Figure 2: Settings array.

dependencies.php 中,或者其他任意位置添加你的 Service Factories:

// Service factory for the ORM
$container["db"] = function ($container) {
    $capsule = new IlluminateDatabaseCapsuleManager;
    $capsule->addConnection($container["settings"]["db"]);

    $capsule->setAsGlobal();
    $capsule->bootEloquent();

    return $capsule;
};

Figure 3: Configure Eloquent.

传递数据表实例到控制器

$container[AppWidgetController::class] = function ($c) {
    $view = $c->get("view");
    $logger = $c->get("logger")
    $table = $c->get("db")->table("table_name");
    return new AppWidgetController($view, $logger, $table);
};

Figure 4: Pass table object into a controller.

从控制器中查询数据表

<?php

namespace App;

use SlimViewsTwig;
use PsrLogLoggerInterface;
use IlluminateDatabaseQueryBuilder;
use PsrHttpMessageServerRequestInterface as Request;
use PsrHttpMessageResponseInterface as Response;

class WidgetController
{
    private $view;
    private $logger;
    protected $table;

    public function __construct(
        Twig $view,
        LoggerInterface $logger,
        Builder $table
    ) {
        $this->view = $view;
        $this->logger = $logger;
        $this->table = $table;
    }

    public function __invoke(Request $request, Response $response, $args)
    {
        $widgets = $this->table->get();

        $this->view->render($response, "app/index.twig", [
            "widgets" => $widgets
        ]);

        return $response;
    }
}

Figure 5: Sample controller querying the table.

使用 where 查询数据表

...
$records = $this->table->where("name", "like", "%foo%")->get();
...

Figure 6: Query searching for names matching foo.

通过 id 查询数据表

...
$record = $this->table->find(1);
...

Figure 7: Selecting a row based on id.

了解更多

Eloquent 文档

文章导航