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中调用并定义
在我实例化新收入的其他情况下,我没有收到此错误。
答案 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
模型类,并且在请求构造函数中的参数的过程中