从另一个模型cakephp 3.5获取数据

时间:2017-12-05 13:34:17

标签: php mysql cakephp cakephp-3.x

我的表格questions包含idquestionsmarks。然后,我的表quizzes包含idquiz_name。我创建了名为question_quizzes的桥表,其中包含来自id表的quiz和来自id表的question。如何在id表格中将所有数据(questionsmarksquestions)显示为question_quizzes的添加形式?

编辑:

这是questionQuizzes控制器中的existingQuestion函数。在existingQuestion函数中,我想显示所有问题表

 class QuestionQuizzesController extends AppController
   public function existingQuestion()
  {
    $query = $questionQuizzes->find('all')->contain('Questions');
    foreach ($query as $questionQuizzes) {
        echo $questionQuiz->question->id;
    }
}

这是questionQuizzesTable

class QuestionQuizzesTable extends Table
{


/**
 * Initialize method
 *
 * @param array $config The configuration for the Table.
 * @return void
 */

 var $name = 'QuestionQuizzes';

public function initialize(array $config)
{
    parent::initialize($config);

    $this->setTable('question_quizzes');

    $this->belongsTo('Quizzes', [
        'foreignKey' => 'quiz_id',
        'joinType' => 'INNER'
    ]);
    $this->belongsTo('Questions', [
        'foreignKey' => 'question_id',
        'joinType' => 'INNER'
    ]);
}

/**
 * Returns a rules checker object that will be used for validating
 * application integrity.
 *
 * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
 * @return \Cake\ORM\RulesChecker
 */
public function buildRules(RulesChecker $rules)
{
    $rules->add($rules->existsIn(['quiz_id'], 'Quizzes'));
    $rules->add($rules->existsIn(['question_id'], 'Questions'));

    return $rules;
}
}

我已编辑了我的编码,但仍有错误"在null"上调用成员函数find()。有谁能够帮我??我被困了

1 个答案:

答案 0 :(得分:0)

当您撰写$query = $questionQuizzes->find()时,您尚未在任何地方声明$questionQuizzes。变量不仅仅是完全形成的。因此,它是null,并且您正尝试在其上调用函数。从你得到的错误信息来看,这一切都应该是不言而喻的,当然它会引导你直接进入相关界限? (@urfusion链接中提供的代码片段仅提供引用$articles,但这些代码在没有上下文的情况下显示,并假设您已事先创建了变量。)

修复方法是使用$this->questionQuizzes->find()questionQuizzes的{​​{1}}成员应该由Cake初始化,这要归功于你在初始化函数中所做的事情。本手册的相关部分将是Query Builder上的部分。

请注意,蛋糕约定会让您将表命名为questions_quizzes,而不是question_quizzes;两部分都是复数。或者quizzes_questions也会起作用,对我个人更有意义(毕竟它跟踪测验的问题)。您选择的名称没有任何问题,但如果您更完整地遵循惯例,示例可能更容易适合您的代码。