【发布时间】:2020-11-27 03:03:33
【问题描述】:
所以我很难找出最好的方法和正确的方法来做到这一点,所以如果有人可以在这里帮助我,我会发布这个问题,因为我正在用 PHP 做一个 Laravel 项目。
假设我们正在为书籍构建一个应用程序,每本书都有几页,有些有 20 页,有些可能有 700 页,如果我们要为这些书籍正确创建一个或多个类,我们该怎么做?
下面我有几种方法可以解决,但我不知道哪种方法可行,和/或哪种方法最好。
选项 1:
<?php
namespace Translation/Logic;
public class Book {
// atributes
public $title;
public $year;
public $author;
public $description;
public $date;
public $language = "English";
// as an atribute maybe we need to have an array of pages here? like
// public $pages = Pages[]??
}
public class Pages {
public number;
public orientation;
public direction;
public page;
public chapter;
public content;
}
选项 2:
<?php
namespace Translation/Logic;
abstract class Book {
// atributes
public $title;
public $year;
public $author;
public $description;
public $date;
public $language = "English";
// as an attributes maybe we need to have an array of pages here?
}
public class Pages extends Book {
public number;
public orientation;
public direction;
public page;
public chapter;
public content;
}
// Then create an array of Pages here, but then we have all the attributes of the books in every page, which don't really make sense?
我很确定我在这里做错了,有一种更聪明的方法可以做到这一点,但在这里只需要一点帮助。
如果它是我的解决方案之一,应该完成我的代码的代码是什么,除了我的之外还有其他替代方法,每种方法的优缺点是什么。
如果不是而且我错了,那么定义这些类的正确方法是什么,为什么?
感谢您花时间回答我:)
【问题讨论】:
-
如果你使用 Laravel,请使用模型。您将有一个
Book模型,一个Page模型,并且数据库将支持它们之间的一对多结构(其中一本书可以有一个或多个页面)。所有这些属性(如页面、方向、章节、内容等)都是数据库列。 -
是的,我会使用模型,但是如果我想将模型中的一本书的数据加载到类对象中,进行操作等。能够做到这一点,这就是问题所在。
-
这将通过模型完成;
public function pages(),您所要做的就是调用$book->pages,您将拥有特定书籍的页面模型集合:laravel.com/docs/7.x/eloquent-relationships#one-to-many。默认情况下,当您查询数据库时,会加载 Book 的所有属性。