2017-01-26 13 views
0

フィールドidオートインクリメントの主キーのテーブルqueryを持っています。インクリメントidを持つ新しいレコードがデータベースに発生したもののsave()の後にautoincrement属性が常にnullです

モデル

class Query extends \yii\db\ActiveRecord 
{ 
    public static function tableName() 
    { 
     return '{{%query}}'; 
    } 

    public function rules() 
    { 
     return [ 
      [['id', 'created_at'], 'integer'], 
      [['data'], 'string'], 
     ]; 
    } 
} 

アプリケーション

$q = new Query(); 
$q->created_at = time(); 
$q->data = Json::encode($query); 
if ($q->save()) 
    echo $q->id == null ? "null" : $q->id; 
else 
    echo "Validation error"; 

結果は、nullです。

また、dbログにはinsertレコードしかありませんが、挿入された行IDを取得するレコードはありません。

どういうところが間違っていますか?

+0

を使用して(ちょうどデバッグのため)してみてください..あなたは、いくつかの検証の問題がある可能性があり..変数$ PRIMARYKEYため

を値を返します方法? – Bizley

+0

なぜ、あなたはprimaryKey()メソッドを再定義しましたか?.. ActiveRecordは既にこのメソッドを持っています – scaisEdge

+0

'primaryKey()'を削除しました。暗黙の 'primaryKey()'を呼び出すと** ['id'] **が返され、 'getPrimaryKey()'は** null **を返します。 – Alexey

答えて

0

あなたは、ベンダーに見ることができるように/ yiisoft/yii2/DB/ActiveRecord.php

PRIMARYKEY方法がすでにあるのでtableSchema

のための適切な主キーを返す

public static function primaryKey() 
{ 
    return static::getTableSchema()->primaryKey; 
} 

このメソッドを再定義するべきではありません。

このメソッドは、具体的にはgetPrimaryKey()ではなくprimaryKey()と呼ばれます。この最後のものは魔法のゲッターです。何も挿入が実行されない場合 `)(あなたは` PRIMARYKEYを削除すると、同じことが起こるんsave(false)

+0

私はprimaryKey()の実装を削除しました。しかし、私が言った問題は解決しません。 – Alexey

+0

「よく聞かれた」という問題をよりよく説明すると、私には明らかではない..とにかく答えが更新された短い提案 – scaisEdge

関連する問題