Laravel / PHP:该模型方法中的模型类的新实例

时间:2014-07-02 16:56:17

标签: php function class oop laravel-4

Laravel的新手,对OOP来说仍然很新鲜!我认为这与OOP有关,而不是严格的Laravel。

所以我的主要问题是我试图通过名为Income的模型中的方法将名为'fin_income_category'的数据库表中的所有行传递给名为PlannerController的控制器。为此,我在Income中创建了一个名为getIncomeCategories()

的静态方法

首先,这是我在收入中的__construct方法:

public function __construct($income, array $attributes = array()){
  parent::__construct($attributes);

  $this->table = $income; 
}

这里也是收入中的getIncomeCategories方法:

public static function getIncomeCategories(){
   $category = new self('fin_income_category');
   $categories = $category->all();
   return $categories;
}

最后,这是PlannerController中的edit($ id)方法,我将调用此方法并将类别传递给我的视图。请注意,只有该函数中的第一个语句是有问题的...其他语句工作正常:

public function edit($id)
{
   $income_categories = Income::getIncomeCategories();

   $newIncome = new Income('fin_income');
   $newRecord = $newIncome->where('id', '=', $id)->get();

   return View::make('planner.edit', array('record'=>$newRecord, 'categories'=>$income_categories));
}

当我运行这样的代码时,我收到Laravel的错误:

  

ErrorException

     

缺少Income :: __ construct()的参数1,   在第615行的/opt/lampstack/frameworks/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php中调用并定义

在我实例化新收入的其他情况下,我没有收到此错误。

1 个答案:

答案 0 :(得分:0)

将getIncomeCategories()更改为此

    public static function getIncomeCategories(){
           $category = new self('fin_income_category');
           return $category->get()->toArray();
   }

您的代码无效的原因是因为

中找到了雄辩的all()
Illuminate\Database\Eloquent\Model; the code snippet is found below

public static function all($columns = array('*'))
{
    $instance = new static;

    return $instance->newQuery()->get($columns);
}

实例化一个静态类,该类绑定到被调用的类,在您的情况下是您的Income模型类,并且在请求构造函数中的参数的过程中