问题描述
例如,我希望将 3 个模型的数据传送到 MyModel4。
$model1data = MyModel1::getList();
$model2data = MyModel2::getList();
$model3data = MyModel3::getList();
获取这些数据的目的是根据上述模型数据准备我的创建视图、编辑视图和显示视图。
现在我面临的问题是我可以使用 MyModel1::getList(); 获取数据并将其传递给我的控制器的 create 方法。我想要用于控制器的显示和编辑方法的相同数据。为此,我必须再次使用 MyModel1::getList(); 获取数据。我想优化我的代码以减少与数据库的交互/减少冗余处理。
那么有没有更短的方法可以让我将它写入我的控制器或模型中以获取这些数据一次并多次使用它而无需从另一个模型重复获取数据?
我尝试在模型中定义单独的方法,但无法使用变量访问。
public static function getrequiredData()
{
$model1data = MyModel1::getList();
$model2data = MyModel2::getList();
$model3data = MyModel3::getList();
}
public static function prepareCreate()
{
return (object)array("model1" => PublishPlan::getrequiredData().$model1data,"viewmodes" => viewmode::getList(),"planSchemes" => PlanSchemes::getList());
}
在上述方法(prepareCreate)中访问 $model1data 时出现错误。
解决方法
我认为您应该为您的问题使用构造函数。
public function __construct()
{
$model1data = MyModel1::getList();
$model2data = MyModel2::getList();
$model3data = MyModel3::getList();
}
使用构造函数,您可以访问同一控制器的所有方法中的列表。
但是如果你想在所有控制器中访问同一个列表,你应该在 Model1、Model2 和 Model3 中定义一个静态变量。