Php 模型/控制器变量-Laravel

Php 模型/控制器变量-Laravel,php,laravel-4,eloquent,Php,Laravel 4,Eloquent,我一直在我的控制器中使用查询生成器,但是我想使用雄辩和查询生成器。我想知道在两者之间传递变量的最佳实践。我已经看了文档,但仍然有问题 以下是我在控制器中的操作方式: public function getRetailers($city) { $locations = DB::table('retailers_listings') ->orderBy('country', 'asc') ->Where('city', $city)

我一直在我的控制器中使用查询生成器,但是我想使用雄辩和查询生成器。我想知道在两者之间传递变量的最佳实践。我已经看了文档,但仍然有问题

以下是我在控制器中的操作方式:

public function getRetailers($city) {    
    $locations = DB::table('retailers_listings')
        ->orderBy('country', 'asc')
        ->Where('city', $city)
        ->get();

        $this->layout->header = $city;
    $content = View::make('retailers.stores')
        ->with('header', $this->layout->header)
        ->with('store_listings', $locations)

        if (Request::header('X-PJAX')) {
        return $content;
        } else { 
            $this->layout->content = $content; 
        } 
    }

我将如何在一个模型中以雄辩的方式完成上述工作?当变量$city从视图中进入时,我如何将其传递给模型。如果能提供比文档更深入的建议,那就太好了

将模型作为依赖项注入控制器中

在这个例子中,为了简单起见,我引用了一个列表模型

class HomeController extends BaseController {

    protected $listing;

    // Type hint your model. This is laravels automatic resolution

    // It will automatically inject this dependency for you

    public function __construct(Listing $listing) 
    {
        $this->listing= $listing;
    }

    public function index()
    {
        $listings = $this->listing->whereTitle(Input::get['title'])->get();

        return View::make('listing' , compact($listings));
    }

}
更好的方法是使用可以让您交换存储实现的存储库

查看答案以了解更多信息

事实上,您可以在控制器中使用列表模型,而无需依赖项注入

Listing::all();
但是前面提到的方法让它更清楚一些

更新

我不知道您的应用程序是如何构造的,所以我将尝试模仿。您可以更改文件和类的名称以匹配您的实现

准备步骤

  • 在应用程序文件夹下创建一个名为Acme的新文件夹(或您喜欢的任何文件夹)。此文件夹与控制器、模型、视图等位于同一级别
  • 在Acme文件夹中创建另一个名为存储库的文件夹
  • 在Repositories文件夹中创建一个名为RetailerRepository.php的新文件
  • 在根目录中编辑composer.json文件并添加prs-0部分,以便自动加载我们的新闻类

    “自动加载”:{
    “类映射”:[ “应用程序/命令”, “应用程序/控制器”, “应用程序/模型”, “应用程序/数据库/迁移”, “app/tests/TestCase.php” ], “psr-0”:{ Acme:“应用程序/Acme” } }

  • 在控制台中运行
    composer dumpautoload-o
    ,您就完成了

  • 现在让我们编写一些代码

    我想你的ORM是

    class Retailer extends Eloquent{}
    
    编辑Acme/Repositories/RetailerRepository.php,如下所示:

    <?php namespace Acme/Repositories
    
    use Retailer;
    
    class RetailerRepository {
    
      public function getLocations($city) {
    
        return Retailer::whereCity($city)->orderBy(‘country’, ‘asc’)->get();
    
      }    
    }
    

    将模型作为依赖项注入控制器中

    在这个例子中,为了简单起见,我引用了一个列表模型

    class HomeController extends BaseController {
    
        protected $listing;
    
        // Type hint your model. This is laravels automatic resolution
    
        // It will automatically inject this dependency for you
    
        public function __construct(Listing $listing) 
        {
            $this->listing= $listing;
        }
    
        public function index()
        {
            $listings = $this->listing->whereTitle(Input::get['title'])->get();
    
            return View::make('listing' , compact($listings));
        }
    
    }
    
    更好的方法是使用可以让您交换存储实现的存储库

    查看答案以了解更多信息

    事实上,您可以在控制器中使用列表模型,而无需依赖项注入

    Listing::all();
    
    但是前面提到的方法让它更清楚一些

    更新

    我不知道您的应用程序是如何构造的,所以我将尝试模仿。您可以更改文件和类的名称以匹配您的实现

    准备步骤

  • 在你的应用文件夹下创建一个名为Acme的新文件夹(或你喜欢的任何文件夹)。该文件夹与控制器、模型、视图等位于同一级别
  • 在Acme文件夹中创建另一个名为存储库的文件夹
  • 在Repositories文件夹中创建一个名为RetailerRepository.php的新文件
  • 在根目录中编辑composer.json文件并添加prs-0部分,以便自动加载我们的新闻类

    “自动加载”:{
    “类映射”:[ “应用程序/命令”, “应用程序/控制器”, “应用程序/模型”, “应用程序/数据库/迁移”, “app/tests/TestCase.php” ], “psr-0”:{ Acme:“应用程序/Acme” } }

  • 在控制台中运行
    composer dumpautoload-o
    ,您就完成了

  • 现在让我们编写一些代码

    我想你的ORM是

    class Retailer extends Eloquent{}
    
    编辑Acme/Repositories/RetailerRepository.php,如下所示:

    <?php namespace Acme/Repositories
    
    use Retailer;
    
    class RetailerRepository {
    
      public function getLocations($city) {
    
        return Retailer::whereCity($city)->orderBy(‘country’, ‘asc’)->get();
    
      }    
    }
    

    这篇文章帮助我更好地理解,但是你能给我一个上面代码的例子吗?这篇文章帮助我更好地理解,但是你能给我一个上面代码的例子吗?