TIP게시판

제목 Laravel의 Eloquent를 Codeigniter3에서 사용하기 Raw
글쓴이 김명철 작성시각 2016/10/22 23:41:35
댓글 : 4 추천 : 1 스크랩 : 0 조회수 : 14493   RSS

Laravel의 Eloquent 를 Codeigniter에서 잘 사용할 수 있습니다. 

 

전체 코드 : 

https://gist.github.com/damulhan/82c7ca5b0bddd79ef9cde1ec13604e8f

 

===================================================

 

compose.json에

       "illuminate/database": "5.0.28", 

       "illuminate/events": "5.0.28",

 

두 줄을 넣고. 

 

{
	"require": {
		"illuminate/database": "5.0.28",
		"illuminate/events": "5.0.28",
	}
}

 

configs/database.php 에 Eloquent를 사용할 수 있도록 만들어진 capsule을 use합니다. 

 

    use Illuminate\Database\Capsule\Manager as Capsule;

    use Illuminate\Events\Dispatcher;

 

===================================================

# configs/database.php 

 

/*
 * Start Implementation of Eloquent
 */
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Events\Dispatcher;

/*
 * Create a new capsule
 */
$capsule = new Capsule;

$capsule->addConnection([
    'driver'    => 'mysql',
    'host'      => $db['default']['hostname'],
    'database'  => $db['default']['database'],
    'username'  => $db['default']['username'],
    'password'  => $db['default']['password'],
    'charset'   => $db['default']['char_set'],
    'collation' => $db['default']['dbcollat'],
    'prefix'    => $db['default']['dbprefix'],
]);

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

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

/*
 * Add Events to CodeIgniter adapted in our own way
 * LINK: http://jamieonsoftware.com/post/90299647695/using-eloquent-orm-inside-codeigniter-with-added
 */
$events = new Dispatcher;

$events->listen('illuminate.query', function($query, $bindings, $time, $name)
{
    // Format binding data for sql insertion
    foreach ($bindings as $i => $binding)
    {   
        if ($binding instanceof \DateTime)
        {   
            $bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
        }
        else if (is_string($binding))
        {   
            $bindings[$i] = "'$binding'";
        }   
    }

    // Insert bindings into query
    $query = str_replace(array('%', '?'), array('%%', '%s'), $query);
    $query = vsprintf($query, $bindings);
    
    // Add it into CodeIgniter
    $db =& get_instance()->db;

    $db->query_times[] = $time;
    $db->queries[] = $query;
});

$capsule->setEventDispatcher($events);

 

사용할 때는 $this->load->model() 하고 사용합니다. 

 

		$this->load->model('Person');
		$this->load->model('Telephone');
		$this->load->model('Telephone_type');

 

예제 코드 

 

		$persons = Person::all();
		
		foreach ( $persons as $person ) {
			echo "Name: " . $person->name . '<br><br>';
			$telephones = $person->telephone;
			print_r($telephones);
			foreach ( $telephones as $telephone ) {
				echo $telephone->telephone_type->type . ': ' . 
						$telephone->telephone . '<br>';
			}
			echo '<hr>';
		}

 

* 전체 코드를 확인바랍니다.

https://gist.github.com/damulhan/82c7ca5b0bddd79ef9cde1ec13604e8f

 

 

관련링크 https://gist.github.com/damulhan/82c7ca5b0bddd79ef9cde1ec13604e8f
 다음글 php를 잘 모르시는 퍼블리셔 분들과의 협업을 위한 소... (1)
 이전글 INNODB 사용가능 여부 확인 (2)

댓글

방문넷 / 2016/10/23 04:16:21 / 추천 0

오호 정보 공유 감사합니다. 라라벨도 배워야하는 마당에..옐로퀀트만 따로 좀 어케 배워보고싶었는데 때마침 

 

코드이그나이터에서 쓸수있게끔 정리 잘해주셔서 감사합니다!

한대승(불의회상) / 2016/10/23 09:44:30 / 추천 0
좋은 정보 공유 감사 합니다.
초보개발자J / 2016/10/26 13:55:04 / 추천 0
죄송한데 옐로퀸트가 뭐하는 친구인지 알수있을까여?..
한대승(불의회상) / 2016/10/26 15:21:39 / 추천 0
@초보개발자J JAVA의 하이버네이트와 같은 ORM 프로그램입니다.