【问题标题】:Many to Many to MorphToMany Relationships多对多到 MorphToMany 关系
【发布时间】:2020-08-22 18:08:23
【问题描述】:

我有一个 ExamQuestionTag(Spatie/laravel-tags 包)模型。

Exam 包含许多 Questions(多对多),Question 包含许多 Tags(MorphToMany)。

我想在 Exam 模型上提供一个方法,通过其关联问题获取 Exam 的所有标签,以便 $exams→tags() 返回属于该考试的关联问题的所有标签。

谁能告诉我为实现这一目标而采取的最佳途径是什么?

【问题讨论】:

    标签: laravel eloquent relationship laravel-query-builder


    【解决方案1】:

    如果你有适当的描述关系,就写这样的东西:

    // Exam Model
    
    public function tags()
    {
        return $this->questions->map(function($q){
            return $q->tags;
        })->collapse();
    }
    

    【讨论】:

      【解决方案2】:

      你可以像这样从考试中获取所有标签

      return Exam::with('questions.tags')->get();
      

      如果你想要标签的一些条件,你可以这样做

      return Exam::with(['questions.tags'=> function($query){
        $query->where('..','..')
      }])->get();
      

      如果你想在你的模型中添加一个合适的函数,就像你说的那样,只需将逻辑放在一个函数中。你的模型就像这样

      Exam.php
      public function getAllTags()
      {
         return $this->with(['questions.tags'=> function($query){
           $query->select('..');
         }])->get();
      }
      // This will just give you what you need 
      

      如果有帮助请告诉我

      【讨论】:

        猜你喜欢
        • 2021-04-05
        • 1970-01-01
        • 2020-06-26
        • 1970-01-01
        • 2018-06-15
        • 2023-03-04
        • 2014-10-11
        相关资源
        最近更新 更多