我是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,还是引导我去实际解释它的文章?
谢谢!
编辑:
好的,Nik和Steve,谢谢你的回答。不幸的是,它并没有解决我的问题。我认为处理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数组或对象?如果是这样,为什么最后一个例子有效(某种程度上)?
答案 0 :(得分:1)
从core.php开始调试,看看为什么它不会删除可以在消息中说出某些内容的条目。
尝试
$ this-> FCPlayer-> deleteAll(array('FCPlayer.name LIKE'=> $ name));
名称列是否可能在开头或结尾有额外的空格?
您可以随时使用:$ this-> FCPlayer->查询(“your-query-goes-here”);,但不建议使用。 :)
答案 1 :(得分: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));
}
答案 2 :(得分:0)
当您删除一条新闻时,CakePHP将不会处理任何其他表中的视图数量。还不是那么聪明:)
您必须手动更改。
您可以使用以下内容:
$number_of_news = $this->Player->field("number_of_news", array("id" => $id));
$this->Player->set("number_of_news" => $number_of_news - 1);