php - 一个模型中的多个表 - Laravel

标签 php laravel laravel-4 eloquent

我的索引页面使用了数据库中的 3 个表:

  • index_slider
  • 索引特征
  • 页脚框

我使用一个 Controller (IndexController.php) 并像这样调用三个模型:

public function index() { 
return View::make('index')
->with('index_slider', IndexSlider::all())
->with('index_feature', IndexFeature::all())
->with('footer_boxes', FooterBoxes::all()); 
}

上面的三个模型需要::all()数据,所以它们都是这样设置的:

class IndexSlider extends Eloquent {
public $table ='index_slider';
}

注意:每个模型的类名称更改

既然我的索引页需要这 3 个表,而且我在每个模型中重复语法,那么我应该使用多态关系还是以不同的方式设置它?从我读过的内容来看,ORM 应该为每个表有 1 个模型,但我不禁觉得这在我的情况和许多其他情况下是愚蠢的。 DRY(不要重复自己)在某种意义上失去了意义。

什么是最好的方法,或者我走在正确的轨道上?

最佳答案

首先我应该说每个模型都是为一个特定的表编写的,除非它们是相关的,否则你不能将三个表压缩到一个模型中。 See Here

我有两种方法可以让您的代码更加 DRY。 我不会将您的数据作为链式传递,而是将其作为您的 make 中的第二个参数传递:

public function index() { 
    $data = array(
        'index_slider'  => IndexSlider::all(),
        'index_feature' => IndexFeature::all(),
        'footer_boxes'  => FooterBoxes::all(),
    );

    return View::make('index', $data);
}

将数据作为第二个参数传递。 See here

另一种方法是创建一个服务(另一个模型类,但没有连接到 Eloquent),如果你的应用程序要变大,这是一个更好的解决方案,当你调用时,它会返回必要的数据。如果您在多个 View 中返回上述数据,我肯定会这样做。

使用服务的示例如下所示:

<?php 
// app/models/services/indexService.php
namespace Services;

use IndexSlider;
use IndexFeature;
use FooterBoxes;

class IndexService
{
    public function indexData()
    {
        $data = array(
            'index_slider'  => IndexSlider::all(),
            'index_feature' => IndexFeature::all(),
            'footer_boxes'  => FooterBoxes::all(),
        );

        return $data;
    }
}

和你的 Controller :

<?php
// app/controllers/IndexController.php

use Services/IndexService;

class IndexController extends BaseController
{
    public function index() { 
        return View::make('index', with(new IndexService())->indexData());
    }
}

这个服务可以用很多不那么具体的方法来扩展,你绝对应该改变命名(从 IndexService 和 indexData 到更具体的类/方法名称)。

如果您想了解有关使用服务的更多信息,我写了一篇关于它的很酷的文章 here

希望这对您有所帮助!

关于php - 一个模型中的多个表 - Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22119118/

相关文章:

php - 如何根据各自的键合并两个数组?

javascript - 为什么只发送其中一份表格?

php - PostgreSQL 中的 Doctrine ORM ArrayCollection

javascript - Laravel中如何实现jquery get函数

excel - 具有多个表格的单个 Excel 工作表 Laravel/Excel

php - 当路由不存在 laravel 4 时重定向

php - 如何在 Symfony 中添加新的翻译域

javascript - 如何获取名称的首字母并将其用作商店的简介

php : The term 'php' is not recognized as the name of a cmdlet, 函数、脚本文件或可运行程序

php - MySQL 数据库表中的 90 列