【问题标题】:How can I access a model from a controller using laravel4?如何使用 laravel4 从控制器访问模型?
【发布时间】:2013-08-29 10:23:34
【问题描述】:

如何使用 laravel4 从控制器访问模型?

到目前为止,我有我的控制器:

<?php
class GatewayController extends BaseController {

public function getContentAll()
{
    $content = Content::getContentAll();
    return $content;

}

还有我的模特:

<?php

class Content extends Eloquent {

    protected $table = '_content';

    public function getContentAll(){

        return 'test';
    }

但我明白了:

Whoops, looks like something went wrong.

【问题讨论】:

  • 你到底遇到了什么错误?
  • 第一件事 - 您正在对模型的函数进行静态调用,而它并未声明为静态。

标签: php laravel laravel-4


【解决方案1】:

首先,Eloquent 处理模型集合的返回。你不需要自己处理这个。所以你的模型应该看起来像这样:

class Content extends Eloquent {

    protected $table = '_content';

}

然后,您可以使用以下方法简单地获取所有内容:

$content = Content::all();

编辑:

如果您想对模型中的数据进行处理,请尝试以下操作:

class Content extends Eloquent {

    protected $table = '_content';

    public function modifiedCollection()
    {
        $allContent = self::all();
        $modifiedContent = array();

        foreach ($allContent as $content) {
            // do something to $content                  

            $modifiedContent[] = $content;
        }

        return $modifiedContent;
    }  
}

这应该可以工作:

$content = Content::modifiedCollection();

【讨论】:

  • 是的,我知道,但我想在将数据返回给控制器之前对数据做一些事情。应该在模型中完成。
  • 您编辑的解决方案也不起作用,它基本上与我在原始问题中的代码相同。
  • 好吧,也许您应该将 debug 设置为 true 并告诉我们错误消息是什么。这应该可以工作,除非有其他问题。
  • @user1013512 伙计,如果您想在从数据库获取和传输到控制器(或其他任何东西)之间处理数据,请查看 Eloquent Accessors/Mutators。但是有一点要注意,这涉及列/归档而不是集合。
  • @Gadoma 这些不会处理我想要处理的内容
【解决方案2】:

而不是这个:

$content = Content::getContentAll();

试试这个:

$content = Content->getContentAll();
                  ^^

或者将你的函数声明为static,像这样:

public static function getContentAll(){

    return 'test';
}

更新:如果您不想拥有static function,您应该实例化您的类以调用非静态函数:

$c = new Content();
$content = $c->getContentAll();

【讨论】:

  • -> 这不起作用,我不想将其声明为静态
  • 谢谢,只是出于兴趣,哪种方法更好?静态还是非静态?为什么要使用一个而不是另一个?
  • 嗯,我认为@cuewizchris 的答案是正确的方法。你不应该将业务逻辑放在你的模型中。
  • @simone 为什么会这样?遵循“slim-controller”理念并不是误用,其中大部分 Biz Logic 都放置在模型中。
  • 我真的不能说瘦控制器(或胖模型)哲学在 Laravel 中是否好;老实说,我对此了解不多。但是我认为我们应该尝试遵循 Laravel 自己的理念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 2012-08-23
相关资源
最近更新 更多