findAll()不在表Yiiframework中

时间:2014-05-12 12:53:30

标签: php sql yii models

他在那里,

我的数据库中有两个表:“Achievements”和“AchievementsCompleted”。我想选择所有成就,除非有一个AchievementCompleted条目将该成就作为外键约束。

例如:

表格中有3行成就:

  • ID:1 - Achievement1
  • ID:2 - Achievement2
  • ID:3 - Achievement3

并且表AchievementCompleted中有一个条目:

  • achievement_id = 2由用户3完成

在这种情况下,我希望输出只是用户3的id 1和3的模型。

$criteria = new CDbCriteria();
$criteria->condition = "";
$models = Achievements::model()->findAll($criteria);

提前致谢!我希望这是有道理的。

2 个答案:

答案 0 :(得分:0)

试试这个

$criteria = new CDbCriteria;
$criteria->join ='INNER JOIN AchievementsCompleted';
$criteria->condition = "AchievementsCompleted.achievement_id != Achievements.id";
$models = Achievements::model()->findAll($criteria);

答案 1 :(得分:0)

你需要使用RIGHT JOIN:

在这里,你获得了所有未完成的成就":

   $criteria=new CDbCriteria;
   $criteria->join='RIGHT JOIN Achievements ON AchievementsCompleted.Achievement_id=Achievements.id';
   $models = AchievementsCompleted::model()->findAll($criteria);

您需要将表列替换为您自己的列(" Achievement_id"和" id")。

这是一个解释SQL联接如何工作的可视化图表: What's the difference between INNER JOIN, LEFT JOIN, RIGHT JOIN and FULL JOIN?