1

我正在从头开始在 SilverStripe 中创建一个网上商店,而不使用商店模块。我在创建购物车时遇到问题。

如果我要创建一个没有任何 CMS 系统的网上商店,我会创建 3 个表。一张User桌子,一张Product桌子,一张Order桌子。

Order表中将存储一个ID订单,一个UserID链接到用户,一个ProductID链接到产品和一个Quantity

因为我使用的是 SilverStripe,所以我不能直接这样做。我可以创建这样的表,但因为它不是创建和运行查询的目的,而不是这样做的方法。

如何使用 SilverStripe 正确执行此操作?

我知道 SilverStripe 的各种开源购物模块,但我发现它们令人困惑,我不知道它们如何相互链接。

4

1 回答 1

3

您可以让 SilverStripe 通过扩展其DataObjectPage类来为您创建数据库表。

以下代码适用于 SilverStripe 3.1。

以下是如何创建User,ProductOrder类来创建您想要的数据库表,以及所描述的关系。我还添加了一个OrderItem类,因为我认为这很有意义。

class User extends DataObject {

    private static $db = array(
        'FirstName' => 'Text',
        'LastName' => 'Text',
        'Email' => 'Text'
    );
}

class Product extends DataObject {

    private static $db = array(
        'Title' => 'Text',
        'Price' => 'Decimal(19,8)'
    );
}

class Order extends DataObject {

    private static $has_one = array(
        'User' => 'User'
    );

    private static $has_many = array(
        'OrderItems' => 'OrderItem'
    );
}

class OrderItem extends DataObject {

    private static $has_one = array(
        'Order' => 'Order',
        'Product' => 'Product',
        'Quantity' => 'Int'
    );
}

一旦你创建了这些类,运行dev/build?flush=1然后查看已经在你的数据库中创建的表。

因为Product您可以扩展Page而不是DataObject希望将产品作为页面显示给用户。这取决于你。

使用 SilverStripe 管理您的类、关系和数据库。这就是它的用途。

如果您想要 SilverStripe 中出色的商店模块,我建议您查看SwipeStripe。或者,如果您确实想自己构建它,您可以在 git 上查看 SwipeStripe 的源代码,看看他们是如何做事的。

于 2015-04-16T22:51:36.177 回答