【问题标题】:Laravel 5 Eloquent Realtionship has one throughLaravel 5 Eloquent Realtionship 有一个通过
【发布时间】:2016-07-13 10:11:42
【问题描述】:

我有以下数据库结构

products            quesionnaires           questionnaire_results
--------            --------------          ----------------------
id                  id                      id
questionnaire_id                            questionnaire_id
                                            product_id

问卷可用于多个产品,并将每个产品的结果分开存储在问卷调查结果表中。

一个产品只能有一份问卷和一份问卷结果。

我需要一种方法从 Product Model 中获取其问卷调查的结果。

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:
    // Product Model
    public function quesionnaire() {
        return $this->hasOne("App\Quesionnaire");
    }
    
    // Quesionnaire Model
    public function questionnaire_result() {
        return $this->hasOne("App\Questionnaire_result");
    }
    

    $product->quesionnaire->questionnaire_result

    【讨论】:

      【解决方案2】:

      如果你没有QuestionnaireResult 模型,那么就没有直接的 Eloquent 关系,因为所有默认关系都依赖于 Eloquent 模型的存在。但是,有一种相当干净的方法可以做到这一点,将其视为ProductQuestionnaire 之间的Many to Many 关系并将questionnaire_results 视为您的数据透视表(即使您真的知道产品永远只属于一个问卷)。

      产品型号:

      public function questionnaire() {
          return $this->belongsToMany('App\Questionnaire', 'questionnaire_results');
      }
      

      问卷模型:

      public function products() {
          return $this->belongsToMany('App\Product', 'questionnaire_results');
      }
      

      由于此关系将返回一个集合,您需要使用[0] 访问第一个数组或使用first() 方法。

      $product->questionnaire()->first();
      

      但是,如果您确实有一个QuestionnaireResult 模型,那么您就有一个非常简单的One to One 关系,无需通过另一个模型。您有一些属于某个产品的问卷调查结果,而一个产品只能有一组问卷调查结果(根据您的帖子信息)。

      产品型号:

      public function questionnaireResult() {
          return $this->hasOne('App\QuestionnaireResult');
      }
      

      问卷结果模型:

      public function product() {
          return $this->belongsTo('App\Product');
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-03
        • 2016-01-20
        • 2019-06-02
        • 1970-01-01
        • 2014-09-30
        • 2015-02-11
        • 2015-08-21
        • 2021-01-14
        相关资源
        最近更新 更多