2012-11-18 32 views
0

我对CakePHP很陌生,无法弄清sql查询在这里的工作方式。我有一个删除按钮,可以删除关于玩家的消息。它没有做什么(它应该)还要处理存储在“fc_players”表中“news”列中的新闻数量。在一个老式的方式,我会去这样的:玩家的CakePHP sql查询

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

(返回$名称;不能只用,因为数据库是如何建立的$ id;“项”是一个表,新闻存储)

("SELECT news FROM fc_players WHERE 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处理,但蛋糕是一个有点困难,我无法找到任何有用的例子。你能帮我把它从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无法处理?如果是这样,为什么最后一个例子工作(有点)?

+0

您使用该蛋糕的版本? – toxicate20

+0

它的版本:1.3.4。 – Adam

回答

0

当您删除一条新闻时,CakePHP不会处理任何其他表中的视图数量。是不是很聪明:)

你必须手动改变它。

您可以使用类似:

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

$this->Player->set("number_of_news" => $number_of_news - 1); 
+0

谢谢。这就是为什么我试图一步一步做到这一点。我有一个ID,想要获得名字并以这种方式处理条目。在你的方法中,Cake究竟知道我们在谈论哪个玩家?我想念“WHERE”选项... – Adam

+0

是的,抱歉,我的错误,我已更新它。 – Alvaro

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

  2. 尝试用

    $这 - > FCPlayer-> deleteAll(阵列( 'FCPlayer.name LIKE'=> $名));

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

  4. 您可以随时使用:$ this-> FCPlayer-> query(“your-query-goes-here”);但这不是推荐的。 :)

+0

广告3.名称只是名称,根本没有空格。 – Adam

+0

广告2.无法尝试它,因为我没有设法获得$ name(请参阅编辑)。 – Adam

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));
}