Я пытаюсь использовать красноречивый orm внутри codeigniter.
Ниже приведен мой файл composer.json
"require": { "php": ">=5.5.0", "illuminate/database": "5.0" }, "autoload": { "classmap": [ "application/models" ] }
В файле index.php я добавил
require 'vendor/autoload.php';
Я создал файл Eloquent.php
в приложении / моделях, чтобы инициировать красноречивый
<?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);
по<?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
я попробовал что-то вроде следующего
<?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 ().
Надеюсь, поможет! 🙂