【问题标题】:fetching data from multiple tables in Cakephp从 Cakephp 中的多个表中获取数据
【发布时间】:2017-08-11 17:36:50
【问题描述】:

我是 cakephp 的新手,并尽我所能在 cakephp 中实现查询。 我有这个问题

SELECT * FROM question join question_topic on question.question_id=question_topic.question_id join topic on topic.topic_id=question_topic.topic_id join user_topic on user_topic.topic_id=topic.topic_id where user_topic .user_id=10

我在 cakephp 中需要这个。

我试过的是这个

$this->Behaviors->attach('Containable');
        return $this->find('all', array(

            'contain' => array(
              'User',
              'UserInfo.UserTopic'=>array(
                       'conditions'=>array('UserTopic.user_id'=>10)
                  ),
              'QuestionAndTopic.Topic','UpVoteQuestion','Answer','Answer.UserInfo'

            ),


           'order' => 'rand()',
            'recursive' => 0
        ));

但是查询没有给我正确的结果。请你看一下。

Question.php

class Question extends AppModel
{
    public $useTable = 'question';
    public $primaryKey = 'question_id';


    public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id',
            'fields' => array('User.user_id','User.email','User.active')

        ),
        'UserInfo' => array(
            'className' => 'UserInfo',
            'foreignKey' => 'user_id',


        )
    );
    public $hasMany = array(
        'Answer' => array(
            'className' => 'Answer',
            'foreignKey' => 'question_id',


        ),

        'QuestionAndTopic' => array(
            'className' => 'QuestionAndTopic',
            'foreignKey' => 'question_id',
     )
  );

  public function latestQuestions(){
         $this->Behaviors->attach('Containable');
        return $this->find('all', array(

            'contain' => array(
              'User',
              'UserInfo.UserTopic'=>array(
                       'conditions'=>array('UserTopic.user_id'=>10)
                  ),
              'QuestionAndTopic.Topic','UpVoteQuestion','Answer','Answer.UserInfo'

            ),


           'order' => 'rand()',
            'recursive' => 0
        ));
    }
}

【问题讨论】:

    标签: php mysql cakephp cakephp-2.0


    【解决方案1】:

    您可以使用 Mysql 查询,它的工作方式与 cakephp 查询一样

    $this->Behaviors->query('SELECT * FROM question join question_topic on question.question_id=question_topic.question_id join topic on topic.topic_id=question_topic.topic_id join user_topic on user_topic.topic_id=topic.topic_id where user_topic .user_id=10');
    

    【讨论】:

      【解决方案2】:

      参考this link

          $options['joins'] = array(
          array('table' => 'books_tags',
              'alias' => 'BooksTag',
              'type' => 'inner',
              'conditions' => array(
                  'Book.id = BooksTag.book_id'
              )
          ),
          array('table' => 'tags',
              'alias' => 'Tag',
              'type' => 'inner',
              'conditions' => array(
                  'BooksTag.tag_id = Tag.id'
              )
          )
      );
      $options['conditions'] = array(
          'Tag.tag' => 'Novel'
      );
      $books = $Book->find('all', $options); 
      

      根据您的表格和字段进行更改。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 2014-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多