【问题标题】:Can I use Laravel's database layer standalone?我可以独立使用 Laravel 的数据库层吗?
【发布时间】:2014-11-22 20:36:40
【问题描述】:

一段时间以来,我一直在寻找使用 php 框架来完成我的工作。直到最近我一直在写程序风格,并且仍在尝试在 oop 世界/风格中找到自己的方式。 我认为 php 框架可以帮助我编写更好的代码,而且我很确定在不久的将来我会倾向于 Laravel 项目。

现在我需要一个可以在现有代码中使用的数据库层。我现在使用带有准备好的语句的 mysqli,因为它很容易实现(之前使用 MySQL)。

我一直将 http://medoo.in 视为使用 pdo 包装器/类的“简单”方式,但支持页面上缺乏活动,而且我将来会使用 Laravel,让我想知道我现在是否可以将 Laravel 数据库层用于我现有的代码。

这可以做到吗?这是否有意义,还是我误解和混合了代码样式的概念?

【问题讨论】:

  • 我独立使用 Eloquent 一年了,我可以说:这是一个糟糕的主意,请使用像 Doctrine 这样的真正 ORM 并避免大量痛苦。
  • Medoo 项目仍处于活动状态。您可以在 GitHub github.com/catfan/Medoo 上查看该项目。

标签: php mysql laravel


【解决方案1】:

IMO 逐步过渡到 OOP 方法是绝对有效的。

你的问题:

是的,您可以单独使用 Eloquent。

这里是打包网站:https://packagist.org/packages/illuminate/database"illuminate/database": "5.0.*@dev" 添加到您的composer.json 并运行composer update。 现在你需要引导 Eloquent。 (https://github.com/illuminate/database)

以下内容是从 repo 的自述文件中复制的:

使用说明

首先,创建一个新的“Capsule”管理器实例。 Capsule 旨在尽可能轻松地配置库以在 Laravel 框架之外使用。

use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => 'password',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
]);

// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));

// Set the cache manager instance used by connections... (optional)
$capsule->setCacheManager(...);

// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();

一旦 Capsule 实例被注册。你可以这样使用它:

使用查询生成器

$users = Capsule::table('users')->where('votes', '>', 100)->get();

其他核心方法可以直接从 Capsule 以与 DB 门面相同的方式访问:

$results = Capsule::select('select * from users where id = ?', array(1));

使用架构生成器

Capsule::schema()->create('users', function($table)
{
    $table->increments('id');
    $table->string('email')->unique();
    $table->timestamps();
});

使用 Eloquent ORM

class User extends Illuminate\Database\Eloquent\Model {}

$users = User::where('votes', '>', 1)->get();

有关使用此库提供的各种数据库工具的更多文档,请参阅 Laravel 框架文档。

【讨论】:

  • 感谢详细的回复.. 我想知道我们是否可以为 Capsule::schema() 创建一个别名设置为 Schema,所以它可以像在 Laravel 中一样使用,即 Schema: :Model->action() 或 Schema::table()->action() ?
  • 您可以创建一个Schema 类并将所有静态方法调用重定向到Capsule::schema()->$method__callStatic
  • 你如何运行迁移,或者这不可能?
【解决方案2】:

巴斯蒂安的回答很好。但还有一件事。如果没有 Event Lib,它就无法工作。安装它;

composer require illuminate/events

你很高兴

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2021-07-19
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多