【问题标题】:Find Condition by And doen't work + cakephp通过 And don't work + cakephp 查找条件
【发布时间】:2013-02-14 16:24:51
【问题描述】:

此函数在 OR 条件下工作。我需要这个来处理 AND 条件。 任何帮助:

$ands = array();
foreach ($array_training_id as $id) {
        $ands[] = array('TrainingsUser.training_id' => $id);
}
$conditions = array('AND' => $ands);
$users = $this->TrainingsUser->find('all', array('conditions' => $conditions));

我想写一个这样的查询 AND 条件:

SELECT user_id FROM trainings_users WHERE training_id = 172 AND training_id = 174

在获取第一个 ID 时,此查询有效。
表格说明: 我有 3 个表 Training - User - Training_users... Training_users 表有 traing_id 和 user_id 我想要的是这样的东西:SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174... 它甚至不起作用在 SqlMyadmin 中


当我给 training_id 172 和 training_id 174 时我需要什么,它必须只返回用户 150

【问题讨论】:

  • 请发布您的模型关系以澄清它们。
  • 我想写一个这样的查询。 SELECT * FROM Training WHERE project_ids = 3 AND project_ids = 6 AND project_ids = 11
  • 再次:请指定您的关系(您在模型中声明的关系)
  • 培训 ----> var $hasAndBelongsToMany = array( 'User' => array( 'className' => 'User', 'joinTable' => 'trainings_users', 'foreignKey' => 'training_id', 'associationForeignKey' => 'user_id',
  • 你可以用它更新你的问题。最好将其放入评论中。

标签: cakephp cakephp-1.3


【解决方案1】:

为什么你的 $array_project_id 首先是一个字符串(除了命名冲突^^)? 它应该是一个 id 数组,并且 cake 可以自动开箱即用。

好吧,无论如何:

$ids = explode(',', $array_project_id);
// now its a clean array

$users = $this->Training->find('all', array('conditions' => 
    array('Training.Project_id' => $ids)
));

在您的 cmets 之后,我仍然看不到在此处使用 AND 的价值。 但到底是什么,给你:

$ands = array();
foreach ($ids as $id) {
    $ands[] = array('Training.Project_id' => $id);
}
$conditions = array('AND' => $ands);
$users = $this->Training->find('all', array('conditions' => $conditions));

瞧。但是,它仍然永远不会工作。

您似乎正在使用某种 HABTM 关系(您应该在一开始就提供这一重要信息!)。然后您需要查询中间模型/关系,以便在此处有两个 belongsTo-relations(= 左连接)。

您真正需要的(再次:为什么您现在才发布相关关系和有关 Training_users 的信息?)是查询中间表“Training_users”,其中包含一个包含在 belongsTo 方向(左连接到用户)。 最重要的事实:使用 OR 而不是 AND。这会得到你想要的结果。

【讨论】:

  • 你想要AND?几个id?这是没有意义的,因为它总是只能属于一个。你总是会得到一个空的结果,不是吗?
  • 嗯,是的。你有什么建议?嗯,应该有办法。 book.cakephp.org/2.0/en/models/retrieving-your-data.html。我在下面写了一个答案,我将 ID 放在它返回 OR 的数组中。我的意思是这 3 个项目的所有 project_id。
  • 马克谢谢您的回复。我想我们就在附近。但仍然无法正常工作。好的...让我们更清楚一点...我有 3 个表 Training - User - Training_users... Training_users 表我有 traing_id 和 user_id 我想要的是这样的东西:{ SELECT user_id FROM Training_users WHERE project_ids = 172 AND project_ids = 174}...即使在 SqlMyadmin 中也不起作用
【解决方案2】:

最简单的方法是创建一个习惯关系。

那么你可以这样做:

$users = $this->User->Training->find('all', array('conditions' => array('User.id =' => $ids)));

这会找到 User.id = $id 的所有位置

根据您的 AND 条件,它将是:

 $users = $this->User->Training->find('all', array('conditions' => 
'AND' => array('User.id =' => $ids['n'], 'User.id =' => $ids['n'])
));

【讨论】:

  • 不...我的朋友,我必须得到 training_ids 才能拥有 user_ids
  • 然后转过来:$this->Training->User->find('all', array('conditions' => array('Trainig.id =' => $ids) ));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
相关资源
最近更新 更多