【问题标题】:Can not using contain cakephp 3不能使用包含 cakephp 3
【发布时间】:2017-03-09 13:57:21
【问题描述】:

我想从 quizdetails 表中选择问题数据。问题的数据也将与答案表连接起来。所以我使用代码php:

$questions = $this
    ->QuizDetails->find()
    ->contain([
        'Questions' => function($q) {
            return $q->contain(['Answers']);
        }
    ])
    ->where(['QuizDetails.quiz_id' => $id]);

归档答案表:

$this->table('answers');
$this->belongsTo('Questions', [
    'className' => 'Publishing.Questions',
    'foreignKey' => 'question_id',
]);

文件 QuizDetailsTable:

$this->table('quiz_details');
$this->belongsTo('Questions', [
    'className' => 'Publishing.Questions',
    'foreignKey' => 'question_id',
]);

所以,当我运行它时,通过一个错误 问题与答案无关

如果我使用:

$question = $this->Questions->find()->contain(['Answers'])

没关系。 请帮我解决它。

【问题讨论】:

    标签: php cakephp-3.0 contain


    【解决方案1】:

    如果我没记错的话,你只需要在 QuizDetails 中包含问题和答案,如果是这样,只需尝试:

    $questions = $this->QuizDetails->find()->contain(['Questions.Answers'])
                 ->where(['QuizDetails.quiz_id' => $id]);
    

    【讨论】:

    • 我试过了,还是报错:Questions is not associated with Answers
    • 如果这确实包含答案,$question = $this->Questions->find()->contain(['Answers']) ?
    • 答案属于问题吗??
    • 谢谢你的回答,我已经看出我的错误了。更改为 'className' => 'Publishing.Questions' -> 'className' => 'Questions'
    【解决方案2】:

    因为两个表没有关联。您应该定义连接条件。

    $this->belongsTo('Questions', [
            'className' => 'Publishing.Questions',
            'conditions' => ['A.id' => 'B.id'], //add this
    ]);
    

    P/s:我是来自 FB Cakephp Viet 的广告,他在那里回答您发布的问题。

    【讨论】:

      【解决方案3】:

      问题来自:'className' => 'Publishing.Questions' 我将文件 QuizDetailsTable 更改为:

      $this->table('quiz_details');
      $this->belongsTo('Questions', [
              'className' => 'Publishing.Questions',
              'foreignKey' => 'question_id'
      ]);
      

      没关系

      谢谢大家

      【讨论】:

        【解决方案4】:

        你必须定义这两种方式。

        这...

        $this->table('answers');
        $this->belongsTo('Questions', [
            'className' => 'Publishing.Questions',
            'foreignKey' => 'question_id',
        ]);
        

        ...还有这个:

        $this->table('question');
        $this->hasMany('Answers', [
            'className' => 'Publishing.Answers',
            'foreignKey' => 'question_id',
        ]);
        

        在您的示例中,您只能这样做:

        $answer = $this->Answers->find()->contain(['Questions']);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-27
          • 1970-01-01
          • 2018-06-27
          • 2015-06-25
          • 2016-11-23
          • 2016-01-05
          • 2015-09-29
          相关资源
          最近更新 更多