こんばんは。ファガイです。
タイトルの通りなのですが、比較的簡単に実現したかったわけで。
とりあえず、比較的簡単に除きますか。(記事投稿時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;
}
以上!
とりあえずこれで自分は動くようになったので、これで一旦触りますかね・・・。
コメント