0

私は CakePHP が初めてで、SQL クエリがここでどのように機能するかわかりません。プレイヤーに関するニュースを消去する削除ボタンがあります。それが行っていないこと (およびすべきこと) は、「fc_players」テーブルの「ニュース」列に格納されているニュースの数も処理することです。昔ながらの方法で、私は次のように行きます:

("SELECT player FROM entries WHERE id = '" . $id . "'");

(プレーヤーの $name を返します。データベースの構築方法により、$id だけを使用することはできません。「エントリ」は、ニュースが格納されるテーブルです)

("SELECT news FROM fc_players WHERE name = '" . $name . "'");

(データベースにある特定のプレーヤーに関するニュースの数を返します)

1 つだけの場合は、データベースから $name を削除します。

("DELETE FROM fc_players WHERE name = '" . $name . "'");

私はやろうとしまし $this->FCPlayer->deleteAll(array('FCPlayer.name' => $name));たが、何らかの理由で機能しません。

それ以上の場合は、単純に減らします。

$news = $news - 1;

("UPDATE fc_players SET news = '" . $news . "' WHERE name = '" . $name . "'");

プレーンな PHP で処理できますが、Cake は少し難しく、有用な例が見つかりません。SQLクエリからCakePHPに翻訳するのを手伝ってくれますか、それとも実際にそれを説明している記事に案内してくれますか?

ありがとう!

編集:

わかりました、ニックとスティーブ、答えてくれてありがとう。残念ながら、それは私の問題を解決しません。SQLクエリの処理に問題があると思います。

$this->Session->setFlash($id, 'success');正しいエントリ ID が表示されるので、$id で問題ありません。

しかし、私がプレイヤー名を取得しようとしているとき:

$player = $this->Entry->field("player", array("id" => $id));

または

$this->Entry->id = $id;
$player = $this->Entry->field('player');

またはクエリを実行

player = $this->Entry->query("SELECT player FROM entries WHERE id = '" . $id . "'");

結果は空白です。次のようにして、プレイヤー名を取得できました。

$player = $this->Entry->field('player');

しかし、削除しているエントリではなく、最新のエントリからプレーヤーの名前が返されただけです。

どこを間違えているのかさっぱりわかりません。setFlash が処理できないある種の od 配列またはオブジェクトを返す可能性はありますか? もしそうなら、なぜ最後の例がうまくいくのですか?

4

3 に答える 3

1

さて、ようやく私はこれを行うことができました。正解は次のとおりです。

$player = $this->Entry->field('player', array('id' => $id));//ええ、シングル '

$news = $this->FCPlayer->field('news', array('name' => $player));

if ( $gossips > 1)
{
$this->FCPlayer->updateAll(array('FCPlayer.news'=>$news - 1),
array('FCPlayer.name'=>$player));
}
else
{
$this->LFCPlayer->deleteAll(array('LFCPlayer.name LIKE' => $player));
}

于 2012-11-20T16:44:27.900 に答える
1
  1. core.php からデバッグを開始し、メッセージで何かを言う可能性のあるエントリが削除されない理由を確認してください。

  2. 試してみてください

    $this->FCPlayer->deleteAll(array('FCPlayer.name LIKE' => $name));

  3. 名前列の最初または最後に余分なスペースを入れることはできますか?

  4. $this->FCPlayer->query("your-query-goes-here"); はいつでも使用できますが、お勧めしません。:)

于 2012-11-18T23:41:37.310 に答える
0

ニュースを削除すると、CakePHP は他のテーブルのビュー数を処理しません。まだそれほど知的ではありません:)

手動で変更する必要があります。

次のようなものを使用できます。

$number_of_news = $this->Player->field("number_of_news", array("id" => $id));

$this->Player->set("number_of_news" => $number_of_news - 1);
于 2012-11-18T20:01:35.757 に答える