fc2ブログ

price-change:blog

色んな情報テンコモリ

CodeIgniter | sqlite2 で scaffolding を動かすの巻

デフォルト(Version 1.5.4)では「サポートしてないよバーカバーカ」と言われてしまうので自力で何とか動かして見たいと思います。

と言うものの、どこから手を着けて良いのかわからなかったので、取りあえず関係ありそうなところを片っ端らからソースを読んでみた。で、わかりました。system/database/drivers/sqlite/sqlite_driver.php_list_columns()メソッドがノンサポートで system/database/DB_driver.phplist_fields()メソッド内で FALSE を返しているのが原因なようですYO。

通常なら _list_columns()メソッドでカラム名を返すSQLを返すようなのですが、sqliteが対応してないので FALSE を返すようです。そこで DB_driver.phplist_fields()メソッドを sqlite_driver.php 内でオーバーライドしちゃおうと奮起してみました。

*注意* コアライブラリを直接いじるので自己責任&バックアップをお願いプリーズ

とその前に、sqlite_driver.phpcount_all()メソッドをいじっておきましょう。いじっておかないとエラーがでてしまうのでね。でも、これいじって大丈夫なのかな?誰かおせーて。


$query = $this->query("SELECT COUNT(*) AS numrows FROM `".$this->dbprefix.$table."`");

の部分を

$query = $this->query("SELECT COUNT(*) AS numrows FROM '".$this->dbprefix.$table."'");

に変更(「`」→「'」)

んでもって、list_fields()メソッドを追加。力業で困難をこんなん風に乗り切る。


function list_fields($table = '')
{
	// Is there a cached result?
	if (isset($this->data_cache['field_names'][$table]))
	{
		return $this->data_cache['field_names'][$table];
	}

	if ($table == '')
	{
		if ($this->db_debug)
		{
			return $this->display_error('db_field_param_missing');
		}
		return FALSE;			
	}
	$sql = "SELECT * FROM ".$this->escape($table)." LIMIT 1";
	$query = $this->query($sql);
	
	$retval = array();
	
	if ($query->num_rows() > 0)
	{
		$row = $query->row_array();
		$keys = array_keys($row);
		foreach ($keys as $val)
		{
			if (!is_int($val))
				$retval[] = $val;
		}		
	}
	
	$this->data_cache['field_names'][$table] = $retval;
	return $this->data_cache['field_names'][$table];
}

で、終了と思ったら大間違い。viewでエラー出ずっぱりになるから、もひとつ修正。


system/scaffolding/Scaffolding.php 76-77行目

$this->lang = $this->CI->load->language('scaffolding', '', TRUE);
$this->CI->load->vars($this->lang);

を

$this->CI->load->language('scaffolding', '', TRUE);
$this->CI->load->vars($this->CI->lang->language);

に変更

これで取りあえず動くはずだ。2日間ぐらい悩んだ自分乙!

スポンサーサイト



テーマ:PHP - ジャンル:コンピュータ

トラックバック

トラックバックURLはこちら
http://pricewave.blog110.fc2.com/tb.php/20-1ba226df
この記事にトラックバックする(FC2ブログユーザー)