我如何在模型中获取一次数据并在通过 Laravel 8.x 中的控制器的多个视图中使用相同的数据

问题描述

例如,我希望将 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 中定义一个静态变量。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...