【问题标题】:Finding if HABTM model association already exists查找 HABTM 模型关联是否已经存在
【发布时间】:2014-02-17 07:16:57
【问题描述】:

我有用户和课程。他们有一个 HABTM 关系,表现为 Subscriptions(即带有 user_id 和 course_id 的表)。

我需要在“课程”页面上有一个条件来检查用户是否订阅了该课程。我不知道该怎么做。

我在 AppController 中设置了这个 $subscriptions,以便在导航中为我提供一个仅包含已订阅课程的菜单:

$this->set('subscriptions', ClassRegistry::init('Subscription')->find('all', 
    array(
        'fields' => array('Course.id', 'Course.name'),
        'conditions' => array('Subscription.user_id =' => $this->Auth->user('id')),
        'recursive' => 1
    )));

我的问题:如何检查订阅是否已经存在?我基本上需要查找是否有一个 user_id 与登录用户相同的订阅,以及一个与我当前所在的课程相同的 course_id。

谢谢!

【问题讨论】:

  • 在询问有关框架的问题时,最好包含您正在使用的版本。

标签: php cakephp has-and-belongs-to-many cakephp-model


【解决方案1】:

这样的事情怎么样?:

$exists = (bool) $this->Subscription->field('count', array(
    'conditions' => array(
        'user_id' => $this->Auth->user('id'),
        'course_id' => $courseId
    )
));

旁注:不要使用recursive。在您的 AppModel 中将其设置为 public $recursive = -1;,然后再也不要设置它。如果您想包含“额外”数据,请使用 Cake's Containable Behavior - 它是一致的,并且可以让您准确指定要提取的数据,而不是仅仅猜测(从长远来看这会导致问题)。

【讨论】:

  • @AD7six - 我同意 - 好点/好代码!我已经更改为匹配。
  • 嘿戴夫 - 感谢您的回复。刚看到这个,如果它有效,明天会告诉你。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多