【问题标题】:How can I dynamically use an Eloquent model, and call the eloquent functions on a variable如何动态使用 Eloquent 模型,并在变量上调用 eloquent 函数
【发布时间】:2022-01-16 18:55:33
【问题描述】:

用户应该能够点击“刀具”链接并获得一个显示刀具数据的表格。或者单击背包并获取背包数据表。

我可以将“knives”变量作为 $id 传递给 main/knives/ 页面,但是当我尝试使用以下方法获取模型时

使用 \App\Models$id

我收到找不到 App\Models"Knives" 的错误消息。 (括号棒)

使用 \App\Models\knives 确实有效。

当我尝试执行 $id::get 或 $id::all 时遇到类似问题,我必须手动将其编写为 knives::all。

我怎样才能去掉这些括号?我应该以不同的方式处理这个问题吗?如何动态获取此模型

Red arrows indicate where I'd like variables, blue indicates where variables work.

【问题讨论】:

  • “use”是一个PHP关键字,所以后面必须跟一个空格
  • @EmekaOkafor 代码中不存在该错字。谢谢
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: php laravel eloquent laravel-8


【解决方案1】:

我不确定我是否正确理解了您的问题,但您可以像这样动态调用类上的方法(未经测试):

    $namespace = "\\App\\Models\\";
    $modelName = "knives";

    $result = ($namespace . $modelName)::all();
   
    // Or alternatively:
    $result = (new ($namespace . $modelName))->get();

    // Or even with dynamic methods
    $method = "find";

    $result = ($namespace . $modelName)::$method(10);

我认为您不能在 PHP 中的 use 语句中使用变量(或者至少我不知道)。

【讨论】:

  • 这成功了!非常感谢。感谢我的问题的选项和改写,因为“动态调用类上的方法”似乎是准确的。
  • 您给鼠标一个 cookie,嘿,您不会对如何使我的使用语句动态化有任何想法吗?
  • 我认为编程语言一般不支持动态导入。我也不认为它是好的做法。您需要它是否有特定的原因?您不能使用多态性或简单地通过将entity_type 添加到存储特定命名空间的数据库列来解决问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
相关资源
最近更新 更多