php - Laravel Eloquent 集成到 Codeigniter 中

标签 php codeigniter eloquent

我正在尝试在 codeigniter 中使用 eloquent orm。

以下是我的composer.json文件

"require": {
        "php": ">=5.5.0",
        "illuminate/database": "5.0"
    },
    "autoload": {
        "classmap": [
            "application/models"
                    ]
    }

在index.php文件中我添加了

require 'vendor/autoload.php';

我已经在应用程序/模型中创建了Eloquent.php文件来启动eloquent

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$CI = & get_instance();

$config = $CI->db;

$pdo = new PDO('mysql:host='.$config->hostname.';dbname='.$config->database, $config->username, $config->password);

$drivers = array(
'mysql' => '\Illuminate\Database\MySqlConnection',
'pgsql' => '\Illuminate\Database\PostgresConnection',
'sqlite' => '\Illuminate\Database\SQLiteConnection',
);

$conn = new $drivers['mysql']($pdo, $config->database, $config->dbprefix);      

$resolver = new Illuminate\Database\ConnectionResolver;
$resolver->addConnection('default', $conn);
$resolver->setDefaultConnection('default');

\Illuminate\Database\Eloquent\Model::setConnectionResolver($resolver);

以下是我的Foo.php模型

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

require_once(APPPATH.'models/Eloquent.php');

use Illuminate\Database\Eloquent\Model as Eloquent;

class Foo extends Eloquent
{
    public $table = "foos";
}

Foos.php Controller 中,我尝试了类似以下的操作

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Foos extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        var_dump(Foo::all());
    }
}

但它返回以下错误。

Severity: Notice

Message: Undefined property: Foos::$db

Filename: models/Eloquent.php

Line Number: 5

我做错了什么?

最佳答案

我相信你缺少的是另一个类胶囊。检查您的供应商文件夹。它位于/.../vendor/Illuminate/database/Illuminate/Database/Capsule/Manager.php

您可以将其用作

require 'vendor/autoload.php';

use Illuminate\Database\Capsule\Manager as Capsule;
$CONFIG['db'] = array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'testDB',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => ''
    );
$capsule = new Capsule;

$capsule->addConnection($CONFIG['db']);
// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();

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

将其设置为全局后,您可以使用以下方式调用它: FooModel.php

use Illuminate\Database\Eloquent\Model as Eloquent;
class Foo extends Eloquent
{
    public $table = "foos";
}

并将其命名为:

use \path\to\Foo;
Foo::all();

您缺少 bootEloquent() 函数调用。

希望对您有帮助! :)

关于php - Laravel Eloquent 集成到 Codeigniter 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30592116/

相关文章:

php - Laravel Eloquent : Return Array key as the fields ID

php - 字符串中的数组

php - 在 $_POST 之后保持 JavaScript 效果

php - 如何将大文件中的数据上传到mysql

php - Laravel DB::RAW 获取单个

php - Laravel - Eloquent attach() 不适用于模型

php - MySQL 可以选择行坐标距离目标坐标 < x 英里的位置吗? (mysql邻近搜索)

php - 我无法提交表格

php - 将纯 PHP 代码转换为 codeigniter

codeigniter - 使用 CodeIgniter 对多个模型函数进行单次交易