【问题标题】:Laravel 5.6 passing eloquent model as parameter to a functionLaravel 5.6将雄辩的模型作为参数传递给函数
【发布时间】:2018-09-02 13:30:36
【问题描述】:

我在刀片表单上有一个选择控件,将通过此功能通过 ajax 刷新:

function getOpciones(tbName) {
    $.get('/ajax/read-data/' + tbName, function(data){
    return (data);
});
}

该函数接受一个字符串变量“tbName”,其中包含与控件相关的表的名称,并将其作为参数传递给路由:

Route::get('/ajax/read-data/{modelo}', 'AjaxController@readData');

然后控制器应该获取参数 {modelo},并检索该表中的记录:

use App\RegFiscal;

public function readData($modelo) {
    $arreglo = $modelo::all();
    return response($arreglo);
}

但即使我使用“使用 App\RegFiscal”来引用模型,我得到的只是 laravel 日志中的这个错误:

2018-03-23 18:52:08] local.ERROR: 异常 带有消息的“Symfony\Component\Debug\Exception\FatalErrorException” '找不到类'RegFiscal'' C:\wamp64\www\laravel\cte\app\Http\Controllers\AjaxController.php:32

我是 Laravel 的新手,不用说我迷路了,任何帮助都将不胜感激。谢谢!

【问题讨论】:

    标签: php ajax laravel-5.6


    【解决方案1】:

    仅仅因为你 use App\RegFiscal 并不意味着 $modelo 与之关联。

    不过,您可以使用app("App\\$modelo") 根据您从路由器获得的参数加载模型。您也不再需要use App\RegFiscal

    $arreglo = app("App\\$modelo");
    return response($arreglo::all());
    

    这是假设您的模型存储在 Laravel 项目中的默认 app 目录中。如果不是,您可以将"App\" 更改为它的存储位置。例如,如果您的模型位于 app\models\modelname.php 中,则为 "App\Models\\$modelo"

    【讨论】:

      【解决方案2】:

      您可以这样做:

      public function readData($modelo) {
      $modelName = '\App' . '\\' . $modelo;
      $class = new $modelName();
      arreglo = $class::all();
      return response($arreglo);
      

      }

      【讨论】:

      • 非常感谢阿里。我试过了,效果很好。我投票 Wild Beard 的答案仅仅是因为它排在第一位,而且打字时间短。但是,当 $class 上的查询参数长于 $class::all(); 时,您的解决方案会更加清晰
      【解决方案3】:

      对于像我这样想要将其注入构造函数的人,这里是如何做到的:

      ~$ php artisan make:provider MyProvider
      

      然后像这样覆盖注册函数:

      class MyProvider implements ServiceProvider {
      
          /** @override */
          public function register() {
              $this->app->bind(ShapeInterface::class, function ($app) {
                  return new Square($app->make(MyModel::class));
              });
          }
      }
      

      ShapeInterface 是一个简单的接口,Square 是一个简单的类,它使用 eloquent 模型的构造函数参数实现 shape 接口。

      class Square implements ShapeInterface {
          private MyModel $model;
      
          function __construct(MyModel $model) {
              $this->model = $model;
          }
      
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 2021-04-22
        • 1970-01-01
        • 1970-01-01
        • 2018-09-24
        • 1970-01-01
        • 2021-08-11
        • 2018-07-05
        • 1970-01-01
        • 2013-01-27
        相关资源
        最近更新 更多