【问题标题】:How to use multiple models in one controller如何在一个控制器中使用多个模型
【发布时间】:2019-07-26 15:30:19
【问题描述】:

我需要在我的控制器中的一个实例中获取六个模型。我该怎么做?

我有我的六个模型:

CommentaireCritique
CommentaireNews
CommentaireDossier
CommentaireEpisode
CommentaireSerie
CommentaireTrailer

它们在我的数据库中都有相同的结构,我想在一个页面上显示最新的通讯。我不知道是否可以将它们绑定在单个控制器中。我试过了,但它不起作用。

public function index()
{
    $comms = CommentaireCritique::all() && CommentaireNews::all()
        && CommentaireDossier::all() && CommentaireEpisode::all()
        && CommentaireSerie::all() && CommentaireTrailer::all()
            ->get();

    return view('admin.commentaires.index', compact('comms'));
}

【问题讨论】:

  • 您没有使用具有多态关系的 Commentaire 模型的任何特殊原因?
  • 我不知道该怎么做。我要快速搜索一下。这是最好的方式吗?
  • 如果您所有的 Commentaire 模型都相同(除了他们评论的模型的外键),那么是的。多态关系基本上意味着您有两列描述外部引用而不是一列。您的CommentaireEpisode 模型现在可能有episode_id 参考。多态 Commentaire 模型将具有替换此列的 commentable_id 列和包含引用模型类型的 commentable_type ,在您的示例中为 App\Episode (或 App\Models\Episode 如果您使用另一个命名空间示例)。
  • 我已经建立了一个数据库。我在现有网站的新版本上工作。如果我理解正确,我需要重新排列我的数据库。我不知道我是否要创建一个新数据库,我不知道如何导入我的所有数据..

标签: laravel model controller


【解决方案1】:

在命名空间之后,在类声明之前

use yourAppNameSpace/modelName

【讨论】:

    【解决方案2】:

    只要您在上面正确声明它们,您可以在控制器中实例化的模型数量没有限制。我认为您需要的是合并所有模型结果的方法,如果是这样,那么您有使用merge method,否则请您澄清一下您的问题。

    【讨论】:

      【解决方案3】:

      是的,您可以在一个控制器上检索它们,

      你已经到了一半,你应该分开不同的变量

      public function index()
      {
          $comms = CommentaireCritique::all() 
          $news = CommentaireNews::all()
          $dossier = CommentaireDossier::all()  
          $episodes = CommentaireEpisode::all()
          $series = CommentaireSerie::all()  
          $trailers = CommentaireTrailer::all()
      
      
          return view('admin.commentaires.index', compact('comms','news','dossier','episodes','series','trailers'));
      }
      

      如果你想把它们放在一个变量中,你可以使用集合docs

      【讨论】:

      • 我试过了,但我没有从所有表中检索数据。我想我会使用另一个数据库!
      • 您的模型设置是否正确?这 6 个不同表中的值是否存在?
      • 是的,但我只想调用刀片中的一个对象,使其只有 {{ $comms->email }} 或 {{ $comms->text }} 并且使用这种方法我必须将所有对象单独放置。不知道是不是很清楚
      【解决方案4】:

      all() 函数的所有结果都返回 laravel 集合。所以使用concat() 函数将所有这些连接到一个集合中

      public function index()
      {
          $coms = CommentaireCritique::all()
              ->concat(CommentaireNews::all())
              ->concat(CommentaireDossier::all())
              ->concat(CommentaireEpisode::all())
              ->concat(CommentaireSerie::all())
              ->concat(CommentaireTrailer::all());
      
          return view('admin.commentaires.index', compact('comms'));
      }
      

      【讨论】:

      • 很抱歉,出现语法错误。请注意arrow when 方法调用而不是dot。 :) 这是一个错误
      猜你喜欢
      • 2012-08-09
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      相关资源
      最近更新 更多