4月 062013
 

こんばんは。ファガイです。

タイトルの通りなのですが、比較的簡単に実現したかったわけで。

とりあえず、比較的簡単に除きますか。(記事投稿時fuelphp1.5)
まずは、packages/oil/generate.phpの259行目付近

strpos($properties, "'id'") === false and $properties = "'id',\n\t\t".$properties.',';

これを、

!\Cli::option('no-id') and strpos($properties, "'id'") === false and $properties = "'id',\n\t\t".$properties.',';

こうします。

これでオプションとして–no-idをつければ出来ると思ってたら思わぬミスを発見。

packages/oil/generate/migration/actions.phpの70行目付近

$have_id or $field_str = "\t\t\t'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),".PHP_EOL . $field_str;

え?orじゃなくてandじゃね・・・?
orじゃ$have_id付けた意味無いじゃん・・・ってことになった。なので、andに変更。

$have_id and $field_str = "\t\t\t'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true),".PHP_EOL . $field_str;

一応、idは付かなくなった。
しかしながらその下の行に直接array(‘id’)が書かれていた・・・。まあここはif判定やっちゃえばいいんだけども。。。もうちょっと使いやすくならないかなぁ。

追記

面倒なことに、$have_idの部分のorをandにしたらidが付かなくなった。
内部を確認した所、$have_idは全く効力を持っていなかった。idを付けてみたらidが2つ付いた形でmigrationが発行されてしまった。

・解決方法
generate.phpのline:589行目辺り

// We always pass in fields to a migration, so lets sort them out here.
$fields = array();
foreach ($args as $field)

この上に、

// idがあるかどうかの判定
$_split_array = explode(":", $args[0]);
!\Cli::option('no-id') and $_split_array[0] != "id" and array_unshift($args, 'id:int');

この判定を突っ込む。ここでidを振ってあるかどうかを確認する。
idを振ってなかったら振る。

あとは、action.phpの一部を変更。大体line:43

$name == 'id' and $have_id = true;

これの下部に以下を追加。

if($name == 'id') {
    continue;
}

以上!

とりあえずこれで自分は動くようになったので、これで一旦触りますかね・・・。

Pocket

 Posted by at 2:30 AM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*