0

我对 CakePHP 有点陌生,无法弄清楚这里的 sql 查询是如何工作的。我有一个删除按钮,可以删除有关玩家的消息。它没有做的(它应该做的)也是处理新闻的数量,这些新闻存储在“fc_players”表的“新闻”列中。以一种老式的方式,我会喜欢:

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

(返回玩家的 $name;由于数据库的构建方式,不能只使用 $id;“entries”是存储新闻的表)

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

(返回数据库中有多少关于某个玩家的新闻)

如果只有一个,则从数据库中删除 $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
  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 回答
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 回答
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 回答