2015-06-02 3 views
2

Я пытаюсь использовать красноречивый orm внутри codeigniter.Laravel Eloquent интеграция в 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); 

следующее мое 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 

Что я делаю неправильно?

+1

Вы считаете, что вместо этого загружаете его как стороннюю библиотеку? Мне просто кажется, что мне легче ... – Shay

+0

Третья сторона, очевидно, еще один хороший вариант. но я просто хочу сначала его решить. –

+0

Добавьте 'require 'vendor/autoload.php';' перед загрузкой codeigniter – Saty

ответ

3

Я считаю, что вам не хватает другой классной капсулы. Проверьте папку поставщика. Он расположен в /.../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() вызов.

Надеюсь, это поможет! :)

+0

У меня это хорошо работает в моем приложении CI 3.0, но мне любопытно, как получить доступ к laravel "DB" с использованием метода выше. Как я могу использовать следующий код: «DB :: statement» («пользователи таблицы drop»); – bertmaclin

+0

@albertleao, вы не можете использовать класс «DB». Однако вы можете использовать класс «Капсула ::». Проверьте это: https://github.com/illuminate/database – vnay92