0

兄弟。奇妙な振る舞いをしました。Laravel 4 ClosureTableパッケージのテストを書いています。

すべてのテストは、さらに使用するために新しいEntity(または) を作成します。Entititesたとえば、最初のテストの 1 つ: ClosureTableTestCase::testInsertSingle. 実行すると、次のようになりました。

Exception: SQLSTATE[HY000]: General error: 1 table pages_closure has no column named 0 (SQL: insert into "pages_closure" ("ancestor", "depth", "descendant", "0", "1", "2") values (?, ?, ?, ?, ?, ?)) (Bindings: array ( 0 => '1', 1 => '0', 2 => '1', 3 => '1', 4 => '1', 5 => '0', ))

そしてvar_dump私に次のように言います:

配列(1) {
  [0] =>
  配列(6) {
    '祖先' =>
    文字列(1) "1"
    [0] =>
    文字列(1) "1"
    '子孫' =>
    文字列(1) "1"
    [1] =>
    文字列(1) "1"
    '深さ' =>
    文字列(1)「0」
    [2] =>
    文字列(1)「0」
  }
}

ただし、Web インターフェイスを介してエンティティを作成すると、すべて問題ありません。

DB::select($selectQuery);ターミナル経由でテストを実行すると、呼び出しからエラーが発生します。ご覧のとおり、[0]、[1]、および [2] の追加の配列キーを取得しました。ただし、Web インターフェイスを介してエンティティを作成すると、すべて問題ありません。

エラーは、内部で実行されるこのメソッドにあります:

protected function performInsertNode($descendant, $ancestor)
{
    $table = $this->closure;
    $ak = static::ANCESTOR;
    $dk = static::DESCENDANT;
    $dpk = static::DEPTH;

    DB::transaction(function() use($table, $ak, $dk, $dpk, $descendant, $ancestor){
        $selectQuery = "
            SELECT tbl.{$ak} as {$ak}, {$descendant} as {$dk}, tbl.{$dpk}+1 as {$dpk}
            FROM {$table} AS tbl
            WHERE tbl.{$dk} = {$ancestor}
            UNION ALL
            SELECT {$descendant}, {$descendant}, 0
        ";

        $results = DB::select($selectQuery);
        array_walk($results, function(&$item){ $item = (array)$item; });

        var_dump($results);

        DB::table($table)->insert($results);
    });
}

間違いを指摘してもらえますか?

4

1 に答える 1

1

うーん、app/config/database.php からのフェッチ設定のようですがPDO::FETCH_BOTH、そうでない場合は..次のコマンドで設定を強制的に取得することができPDO::FETCH_ASSOCますDB::select:

Config::set('database.fetch', PDO::FETCH_ASSOC);
于 2013-09-17T09:11:35.897 に答える