11

データベースからの項目を持つ既存の配列変数に新しい配列項目をプッシュしようとしています。私がしたいのは、この配列の最後に「その他」という名前の新しいアイテムを追加し、データベースからのすべてのアイテムで構成されるビューの選択ドロップダウンとして表示し、この最後で「その他」アイテムを選択することですコントローラーに手動で追加しました。

これが私がやろうとしたことです:

    $competition_all = Competition::all();
    $newCompete = array('name'=>'Others');
    array_push($competition_all, $newCompete);

    $this->competition_games = array('Competition');

    foreach ($competition_all as $competition_games) {
        $this->competition_games[$competition_games->name] = $competition_games->name;
    }

それが言ったことはこのようなものです

未処理の例外

メッセージ:

オブジェクト以外の場所のプロパティを取得しようとしています:

C:\xampp\htdocs\khelkheladi\khelkheladi\application\controllers\register.php 行 104

私のデータベースでは、コンペティションにはこのタイプの列構造があります

->id
->year
->place
->name
->created_at
->updated_at

与えられた順序で。

私がやろうとしているのは、実際にデータベースにアイテムを挿入せずに、ビューの選択タグで他の選択アイテムを静的に表示することです。そのような新しいアイテムを実際にデータベースに挿入せずにビューのみに表示するにはどうすればよいですか?

データベースアイテムを取得するだけで以前に取得した出力は次のようになります

<select>
  <option value="1">Value 1</option>
  <option value="2">Value 2</option>
  <option value="3">Value 3</option>
  <option value="4">Value 4</option>
</select> 

私がやりたいことはこのようなものです

<select>
  <option value="1">Value 1</option>
  <option value="2">Value 2</option>
  <option value="3">Value 3</option>
  <option value="4">Value 4</option>
  <option value="5">Others</option>
</select> 
4

2 に答える 2

13

これは、配列の最後の要素に非オブジェクトを追加しているためです。

ここでは、name プロパティを持つオブジェクトの配列を取得するとします。

$competition_all = Competition::all();

ここでは、キー=>値のペアをオブジェクト配列の最後の要素に追加します

$newCompete = array('name'=>'Others');
array_push($competition_all, $newCompete);

ここでは、オブジェクトの配列を見ていき、最後の要素になると、「$competition_games->name」には name プロパティがありません

foreach ($competition_all as $competition_games) {
            $this->competition_games[$competition_games->name] = $competition_games->name;
        }

次のようにstdclassを含めるようなものを試してください:

$newCompete = new StdClass();
$newCompete->name = 'Others';
array_push($competition_all, $newCompete);
于 2012-10-02T06:42:51.370 に答える
3

これを行う「クリーンな」方法はCompetition、データベースにコミットせずにのインスタンスを作成し、追加のインスタンスを使用してサイクルをもう一度繰り返すことです。

ただし、ここではリストを作成しているように見えるので、最終的なリストにはるかに迅速に追加するのに十分なはずです。

// Empty array
$this->competition_games = [ 0 => 'Others' ];

foreach (Competition::all() as $game) {
    $this->competition_games[$game->id] = $game->name;
}

存在しないIDとして0(または-1)を使用します。

于 2012-10-02T06:39:29.527 に答える