Laravel 模型:模型属性在哪里?

2024-03-20

(我来自 Visual Studio + Entity Framework 背景,并尝试在 Laravel + Eloquent 中找到等效功能)

在 EF 和 Visual Studio 中,我们向应用程序添加一个新模型,并只告诉它我们现有的数据库。然后,EF 可以为我的表生成具有列公共属性的模型。这为我们提供了所有 IDE 和编译器的优势,例如智能感知、拼写错误检测等。

我最近表示正在探索 VS Code、Laravel 和 Eloquent。浏览所有这些教程和文章,我不确定这些属性何时以及如何在模型类中生成。我刚刚尝试过artisan make:model命令,它确实生成了模型类,但其中没有属性。所以,

  1. 我应该手写吗? (真的吗?)
  2. 这些只是公共变量还是具有 getter/setter 的标准属性(请原谅我的 .NET 心态:))?
  3. 是否有工具/扩展可以检查我的数据库并创建具有列属性的模型?

Update

对于回答我问题的人,非常感谢。另外,我发布的一些评论是由于我对 PHP(奇怪的 IMO)成员访问方法的无知;我刚刚发现 PHP 不会抱怨不存在的类成员,而是动态生成它们(例如$post->NonExistingMember = SomeValue运行正常;这甚至无法用我所知道的大多数其他语言进行编译)。对我来说是一个很大的惊喜。我使用过 C++、VB、C#、Java 以及其他几种语言,但在其他地方没有看到过这种行为。所有这些语言都会立即抛出编译时错误,指出类似 Type X 不包含名为 Y 的成员。无法了解 PHP 的不同方法如何与 OOP 结合在一起。

我发布此问题的实际问题仍未解决。虽然我可以使用依赖/laravel https://medium.com/@CristianLLanos/eloquent-models-from-my-database-5d74c632e03c#.qg7cd4vri为了为我的数据库生成模型类,该工具仍然不会针对表列生成类成员,因此我没有获得自动完成的好处。我很想听听专家的意见是否可以做到这一点(当然是自动的)。

Update 2

现在我对 Laravel 环境有了更好的了解,我想分享一下我的经验。请参阅下面我的回答。


现在我已经花了一些时间来了解 Laravel、Eloquent 和 PHP,我将分享一些内容,希望对其他初学者有所帮助。

PHP 是一种动态语言,其代码是动态编译的(这与 C# 和 VB.NET 不同)。您的模型类不需要显式定义成员即可访问/可分配,因此只要它们扩展Model(Laravel Eloquent 中的内置类),您可以为与基础数据库表列同名的不存在的成员赋值,Eloquent 会为您将其存储在数据库中。例如,如果您有一个posts数据库中的表有一个名为body,您可以编写以下代码在数据库中创建新记录:

$p = new Post;
$p->body = 'Some stuff';
$p->save();

当然你需要上课Post在您的项目中延伸自Model但你不需要定义一个成员body在那个班级里面。对于来自 .NET 世界的人来说,这听起来很奇怪,但这就是动态语言的工作原理。

至于自动生成模型,Laravel 包含内置命令(php artisan make:model)可以为您生成这些。

最后,对于智能感知和自动完成,请使用 Laravel 本身使用的相同工具,即 DocBlocks。这些是 PHP 中特殊类型的注释,您可以使用它们来记录代码元素。因此,您可以将 DocBlock 添加到包含属性名称和类型的所有模型类中。对每个人来说幸运的是,VS Code 中有一个非常简洁的扩展,可以自动为您执行此操作。使用以下命令安装它:

composer require --dev barryvdh/laravel-ide-helper

现在运行以下命令为所有模型类生成 DocBlocks(显然您应该在此之前已经生成数据库和模型):

php artisan ide-helper:models --dir='app'

该扩展将获取数据库的结构并将 DocBlocks 注入到所有模型中,如下所示:

/**
 * App\User
 *
 * @property int $id
 * @property string $name
 * @property \Illuminate\Support\Carbon|null $created_at
 * @property \Illuminate\Support\Carbon|null $updated_at
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereCreatedAt($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereId($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\User whereName($value)
 * @method static \Illuminate\Database\Eloquent\Builder|\App\Exam whereUpdatedAt($value)
 * @mixin \Eloquent
 */
class User extends Model
{
}

VS Code 现在将在模型属性中显示表字段名称,如下所示(了解智能感知如何调出name当我们键入时,我们的 DocBlocks 中的成员na...):

enter image description here Note that I also have Intelephense installed in my VS Code, though I'm not sure if that is required for auto-complete feature to work.

Edit

动态属性在 PHP 8.2 中已被弃用,并且我听说它们将在 PHP 9.0 中变得无效,这意味着 Laravel 模型在未来的版本中不应该能够执行这种神奇的操作。

我不是 PHP 专家,但我听说我们不需要惊慌。两件事:首先,实现的对象__get and __set将继续正常工作。其次,加上你(他们)还可以使用#[AllowDynamicProperties]在模型类上允许动态道具。最后,他们可以重写模型生成器以将列名称作为模型类中的 props 输出。最后一个将是最好的,将使 PHP 更接近 C# 世界的工作原理(正是这篇文章的开始,哈哈)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 模型:模型属性在哪里? 的相关文章

  • 如何将自己的js文件导入到vite中?

    我将 Laravel 与 Vite 结合使用 我想使用 Vanilla JS 代码添加文件 在我使用mix之前 我从来没有使用过Vite 我尝试将此代码添加到文件 vite config js 中 如下例所示 laravel input r
  • MySQL 和 PHP 参数 1 作为资源

    好吧 当我运行下面提到的代码时 PHP 向我抛出此错误 在日志中 Error mysql num rows 期望参数 1 为资源 第 10 行 place 中给出的字符串 9 11号线 queryFP SELECT FROM db coun
  • 发送变量后的 wsdl 服务响应,php

    我是 SOAP WSDL 函数的新手 我有一位客户从一家从事汽车测试的公司获得了 wsdl 文件 我的客户是他们的分包商 他们告诉我们上传有关车牌 类别等信息 一旦详细信息发送完毕 服务器就会做出成功或失败的响应 请您协助 浏览不同的信息
  • 使用 phpdocx 下载损坏的 .docx

    我有一个项目 我们使用 phpdocx pro 在模板中生成 docx 文件 我可以很容易地将数据输入到模板中 但是当下载文件并在 MS Word 2010 中打开时 程序报告无法打开文件 因为内容存在问题 详细信息是 文件已损坏 并且无法
  • 这个巨大的正则表达式是如何工作的?

    我最近在我的一个目录中的一个名为的文件中找到了下面的代码doc php 文件功能或链接到文件管理器 做得非常好 基本上 它列出了当前目录中的所有文件 并且允许您更改目录 它可以访问我的所有文件 添加 重命名 信息 删除 我不记得安装过它 我
  • php基于onclick函数输入日期类型

    用户选择日期 月份和年份 然后按一个按钮 根据他选择的日期向他显示数据库的值 不知道代码问题出在哪里
  • Laravel - 急切加载 Eloquent 模型的方法(而不是关系)

    就像我们可以急切加载 Eloquent 模型的关系一样 有没有办法急切加载不是 Eloquent 模型的关系方法的方法 例如 我有一个 Eloquent 模型GradeReport它有以下方法 public function totalSc
  • Facebook iFrame 应用程序 - 摆脱垂直滚动条?

    我已经转换了一个 Facebook 应用程序 http apps facebook com video preferans 从 FBML 到 iFrame 使用 PHP SDK 现在显示的垂直滚动条与我之前显示的内容数量相同 一个徽标 一个
  • EditorTemplate 的嵌套模型的 ASP.NET MVC3 条件验证

    假设你有一个 viewModel public class CreatePersonViewModel Required public bool HasDeliveryAddress get set Should only be valid
  • PHP 的脚手架 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 PHP 中有什么东西可以像 Rails 一样创建基本的脚手架吗 编辑 我需要一些东西来快速原型化 一些框架比如Symfony http www sym
  • PHP DOM - 剥离 span 标签,保留其内容

    我希望采用如下标记 span class test Some text that is strong bolded strong and contains a a href link a span 并在 PHP 中找到剥离跨度的最佳方法 剩
  • 切换到 mysqli 是个好主意吗?

    我正在考虑为我的所有 php 项目切换到 mysqli 我的代码编写方式 我运行非常简单的网站并构建了自己的基本框架 我在所有网站上使用该框架 我在修改函数和类时不应该遇到太多问题 然而 我只听说过关于准备好的语句的积极的事情 除了一些关于
  • 从 php 执行 bash 脚本并立即输出回网页

    我有一组 bash 和 Perl 脚本 开发在 Linux Box 上部署所需的目录结构 可选 从svn导出代码 从这个源构建一个包 这在终端上运行良好 现在 我的客户请求此流程的 Web 界面 例如 某些页面上的 创建新包 按钮将一一调用
  • PHP-docker容器中的环境变量

    我想在我的 docker 容器中显示一个环境变量 PHP 脚本如下所示 我使用 OpenShift 来启动容器 PHP 容器显示 env is 现在我更改容器的 dc 配置 oc env dc envar USER Pieter deplo
  • Laravel 登录后重定向回来

    登录后如何重定向返回页面 在 Laravel 5 2 中 认证控制器 protected redirectTo 重定向用户
  • Paypal 将钱从一个帐户转移到另一个帐户

    我知道这个建议如何汇款至任何 PayPal 账户 https stackoverflow com questions 1559808 paypal api send money to any paypal account但到目前为止我所尝试
  • 在 PHP 中接受带有小数点和千位分隔符的国际数字

    对于用户可以输入能量值来计算相应费用的在线计算器 我需要 PHP 脚本来接受各种用户输入 200 万又四分之一焦耳 的值可以输入为 2000000 25 默认表示法 2 000 000 25 带千位分隔符 2000000 25 逗号作为小数
  • 使用 file_get_content 发布数据

    我已经做了一些关于如何使用的研究file get content与帖子 我也读过this one https stackoverflow com questions 2445276 how to post data in php using
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 通过 Sparkpost 发送 iCal 邀请

    我正在尝试使用 SparkPost 通过电子邮件以附件形式发送日历邀请 但收到电子邮件后邀请不会打开 我使用两个文件 calendarinvite php 来创建邀请 使用 Sendemail php 来发送电子邮件 calendarinv

随机推荐

  • 该算法的名称是什么?它与其他图像重采样算法相比如何?

    这个算法已经在我脑海中存在了很长一段时间 但我找不到任何地方描述它 虽然它是如此简单 但我不可能是唯一一个想到它的人 它的工作原理如下 你从一张图片开始 比如说 7x7px 您需要将其重新采样 例如 5x5px 所以你要做的就是取每个新方块
  • UITextView 和浮动自动更正窗口的位置

    我有一个启用自动更正的 UITextView 视图的高度约为 30 像素 当自动更正启动时 自动更正视图在文本下方几乎不可见 有没有办法控制小自动更正窗口的位置或确保它是顶层 以便它始终可见并且用户可以轻松查看并与之交互 我发现在 UITe
  • Backbone.js 和 requirejs:如何将模型、视图和集合转换为 requirejs 模块?

    我正在使用backbone js开发一个javascript应用程序 也就是说 为了便于开发 我以这种方式构建我的文件 app views L movieRow js L movieDetail js models L movie js L
  • Java 8 构造函数参考的可怕性能和大堆占用?

    我刚刚在我们的生产环境中经历了一次相当不愉快的经历 导致OutOfMemoryErrors heapspace 我将问题追溯到我的使用ArrayList new在一个函数中 验证这实际上比通过声明的构造函数正常创建执行得更差 t gt ne
  • 等待设备时出错:等待模拟器上线 300 秒后超时

    我一直在尝试使用 android studio 2 0 模拟器 但我无法在模拟器上运行我的应用程序 当我运行我的应用程序时 它会显示模拟器 其中包含以下详细信息 哈克斯已启用 Hax ram size 0x800000000 HAx 正在运
  • 如何设置 UIBarButtonItem 的字体大小?

    我找不到自定义标题字体大小的方法UIBarButtonItem 我能想到解决这个问题的唯一方法是将其设置为图像 我想避免这种情况 还有其他建议吗 Objective C NSUInteger fontSize 20 UIFont font
  • 在 Rails 中的 find 中使用 lambda

    我有一个方法可以进行分页查找调用 例如 1 coll paginate all lambda conditions gt status AND expires lt a DateTime now select gt Constants PO
  • 在 BeautifulSoup 中替换文本而不转义

    我想用 BeautifulSoup 中的锚链接包装一些尚未链接的单词 我用这个来实现它 from bs4 import BeautifulSoup import re text replace this string soup Beauti
  • PHPUnit 在运行第一个测试之前进行设置,并在运行最后一个测试之后进行拆除

    我正在尝试使用 PHPUnit 为 php 应用程序实现类似 Django 的测试实用程序 类似 Django 我的意思是在运行第一个测试之前从主数据库创建一个单独的测试数据库 并在运行最后一个测试后将其删除 即使一次运行许多测试用例 测试
  • 用dense_rank数填充多维数组的rank列

    我的数组结构如下 points gt 10 details gt name gt Team A rank gt points gt 10 details gt name gt Team B rank gt points gt 8 detai
  • c++ 可以通过引用传递临时 lambda(适用于 msvc/windows,但不适用于 gcc/linux)?

    假设我有以下代码片段 global variable std thread worker thread Template function template
  • ui 中的输入绑定:jsf 中的重复

    我正在使用facelets jsf 2 0和primefaces 3 0 M2组件库 我正在尝试实现动态行数 包括发生数据表选择时填充的输入字段 每当进行选择时 动态行都会使用输入字段正确生成 但在后续选择的第一个选择之后 动态行计数会正确
  • 如何将本地MYSQL数据库移动到远程数据库服务器

    我有一个在 WAMP 下运行的本地 MYSQL 数据库 我需要将其移至生产数据库服务器 MySQL 新手 需要了解提升此数据库的最佳方法 您可以在当前服务器上运行它 mysqldump u user p database name gt d
  • R:如何将我的数据格式化为多项式 Logit?

    我正在 R 上复制一些 Stata 代码 我想使用以下命令执行多项式逻辑回归 mlogit函数 来自同名包 我知道有一个multinom函数于nnet但我不想用这个 我的问题是 使用mlogit 我需要使用以下方式格式化我的数据mlogit
  • 如何在 iOS 应用程序中获取某个位置的时区? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 我正在尝试构建一个主要可以做两件事的应用程序 a 获取用户的系统时间 比如说 他的手机在伦敦 所以他的时间 b 获取给定地点的时间 例如 旧金山 然后 我想计算两个地点之间的时间差 例如
  • PHP 中基于开关的 URL 路由

    我目前正在做的是这样的 我有一个 path变量 即后面的所有内容索引 php 我用 htaccess 隐藏 直到问号以忽略查询字符串 然后我用一个switch with preg match该变量的情况下确定它应该调用什么脚本 例如 swi
  • 如何去除 CMake 变量中的尾随空格?

    我们正在尝试改进 CMake 生成的 makefile 对于 Clang GCC 和 ICC 我们要添加 march native 这样做的块看起来像 march native for GCC Clang and ICC on i386 i
  • Slick Grid 中的数据更新

    我有一个 slickgrid 大约有 100 行 它的数据在 5 秒内刷新 但每次更新时滚动都会重置 这令人不安 我尝试使用 dataview 和 dataview refresh 但这次没有任何变化反映到网格 这是我在每次刷新时尝试的内容
  • 使用 pandas 加载大 CSV 文件

    我正在尝试使用 pandas 加载 csv 文件 大约 250 MB 作为数据框 在我的第一次尝试中 我使用了典型的 read csv 命令 但收到错误内存 我已经尝试过中提到的方法pandas 中的大型持久 DataFrame https
  • Laravel 模型:模型属性在哪里?

    我来自 Visual Studio Entity Framework 背景 并尝试在 Laravel Eloquent 中找到等效功能 在 EF 和 Visual Studio 中 我们向应用程序添加一个新模型 并只告诉它我们现有的数据库