我有包含questions
,id
和questions
的表marks
。然后,我有了包含quizzes
和id
的表quiz_name
。我创建了名为question_quizzes
的网桥表,其中包含id
表中的quiz
和id
表中的question
。如何将id
表中的所有数据(questions
,marks
,questions
)显示为question_quizzes
的添加形式?
编辑:
这是questionQuizzes控制器内部的现有Question函数。在现有的问题功能中,我想显示所有问题表
class QuestionQuizzesController extends AppController
public function existingQuestion()
{
$query = $questionQuizzes->find('all')->contain('Questions');
foreach ($query as $questionQuizzes) {
echo $questionQuiz->question->id;
}
}
这是问题测验表
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()”。有谁能够帮助我??我被困住了
最佳答案
编写$query = $questionQuizzes->find()
时,没有在任何地方声明$questionQuizzes
。变量不仅会完全形成。因此,它为空,您正在尝试在其上调用一个函数。从收到的错误消息来看,所有这些都应该是不言而喻的,可以肯定地将您定向到了所讨论的行吗? (@urfusion链接中有一些代码片段,它们仅引用了$articles
,但是这些代码片段没有上下文显示,并假定您已预先创建了变量。)
解决方法是使用$this->questionQuizzes->find()
。 questionQuizzes
的$this
成员应该已经由Cake进行了初始化,这要归功于您在initialize函数中所做的事情。手册的相关部分将是Query Builder上的部分。
请注意,Cake约定会让您将表命名为questions_quizzes,而不是question_quizzes;两个部分都是复数。或quizzes_questions也可以使用,并且对我个人而言更有意义(毕竟,它跟踪测验的问题)。您选择的名称没有错,但是如果您更完全地遵循约定,示例可能会更容易地适合您的代码。
关于php - 从另一个模型cakephp 3.5获取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47654910/