CakePHP sql查询

时间:2012-11-18 19:15:46

标签: php sql cakephp

我是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数组或对象?如果是这样,为什么最后一个例子有效(某种程度上)?

3 个答案:

答案 0 :(得分:1)

  1. 从core.php开始调试,看看为什么它不会删除可以在消息中说出某些内容的条目。

  2. 尝试

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

  3. 名称列是否可能在开头或结尾有额外的空格?

  4. 您可以随时使用:$ 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);