【问题标题】:What's the best practice of creating models and getting the information using the Laravel Eloquent?使用 Laravel Eloquent 创建模型和获取信息的最佳实践是什么?
【发布时间】:2018-08-07 09:44:10
【问题描述】:

我想知道使用 Laravel 框架创建模型的最佳方式是什么?据我所知,该模型用于连接到数据库表,然后您可以对其数据做任何您想做的事情。

为每个数据库表创建一个新模型(如here 所述)并不好,应该为每个业务对象创建模型。不知道这意味着什么。我想使用 Eloquent 访问同一张表并从中获取一些信息,类似于:

<?php

// Get the model class
use App\Post;

// Grab some data from the posts table
$posts = Post::all();

但它需要有一个模型。使用select 方法,例如:

$posts = DB::table('posts')->select('title, body')->get();

不需要模型,所以我不太明白模型的意义何在?我在 Laravel 文档中找不到足够的信息:https://laravel.com/docs/5.6/eloquent

【问题讨论】:

  • "模型用于连接数据库表" 注意有些模型没有数据库连接/表。
  • 关键是它是一个你可以像其他类一样使用的类,但也有数据库行支持。如果您正在使用面向对象编程编写代码,那么拥有一个代表您拥有的实际对象的类比将所有内容转储到数组或标准对象中更有用。
  • 所以你会建议每次我尝试对数据库做某事时创建一个新模型?那是很多模型:O
  • 不,您为数据库中的每个实体创建模型,而不是为数据库中的所有事物创建模型。例如:users 是实体,roles 是实体,但 user_roles 不是实体而是关系。如果您认为模型太多,那么只需制作对模型有用的事物的模型。
  • 那么,简单来说,每个数据库表(实体)一个模型?

标签: php laravel model eloquent


【解决方案1】:

作为对您问题的完整解释:

使用方法:

<?php

// Get the model class
use App\Post;

// Grab some data from the posts table
$posts = Post::all();

将与运行如下查询相同:

<?php 
$posts = DB::table('posts')->select('*')->get();

但最大的不同是前者返回的是 Eloquent 对象,后者返回的是普通对象。第一个模型需要一个模型,它扩展了 eloquent,后面的方法是使用 DB 类,它没有扩展 eloquent。所以当你想使用 Eloquent 时,你必须使用模型。

为每个 DB 表创建一个新模型(如此处所述)并不好,应该为每个业务对象创建模型。不知道是什么意思。

实体是诸如用户、帖子、评论、消息之类的东西,但不是诸如 user_has_posts 或 user_has_messages 之类的关系表。不完全确定如何解释它,但我相信你会明白的。

另外请记住,模型应该只包含数据库逻辑,我已经看到很多次人们使用模型来过滤数组,但这不应该属于模型。

【讨论】:

  • 很好的解释!谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2015-04-16
  • 2012-11-11
相关资源
最近更新 更多