我正在尝试在 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/