Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数据库中存储数据与在类中存储数据_Php_Laravel 4 - Fatal编程技术网

Php 在数据库中存储数据与在类中存储数据

Php 在数据库中存储数据与在类中存储数据,php,laravel-4,Php,Laravel 4,我正在使用Laravel4.2构建一个PHP应用程序。该应用程序允许用户访问网站并提交唯一代码。提交代码时,将向他们颁发他们获得的奖励。奖励可能会有所不同,如“下次购买可享受10%折扣”、“免费t恤”、“下次购买可免费送货”等 我的应用程序中有一个code模型,它是用户最初提交的唯一代码的模型。因此,申请的第一步是检查他们提交的代码,确保它存在于数据库中,然后给出他们有资格获得的可能奖励列表 我的第一个想法是使用奖励模型和奖励表将可用奖励存储在数据库中,然后在用户提交其唯一代码后将相关奖励呈现给

我正在使用Laravel4.2构建一个PHP应用程序。该应用程序允许用户访问网站并提交唯一代码。提交代码时,将向他们颁发他们获得的奖励。奖励可能会有所不同,如“下次购买可享受10%折扣”、“免费t恤”、“下次购买可免费送货”等

我的应用程序中有一个
code
模型,它是用户最初提交的唯一代码的模型。因此,申请的第一步是检查他们提交的代码,确保它存在于数据库中,然后给出他们有资格获得的可能奖励列表

我的第一个想法是使用
奖励
模型和
奖励
表将可用奖励存储在数据库中,然后在用户提交其唯一代码后将相关奖励呈现给用户。在我的模板中类似这样的内容:

<ul> 
    @foreach($rewards as $reward) 
        <li>{{ $reward->name }}</li>
        <li>{{ $reward->value }}</li>
        <li>{{ $reward->redemption_instructions }}</li>
    @endforeach
</ul>
我想弄清楚如何设置设备,使其以这种方式运行。我计划建立课程来存储每次奖励所需的信息。例如,其中一个可能如下所示:

<ul> 
    @foreach($rewards as $reward) 
        <li>{{ $reward->display() }}</li>
    @endforeach
</ul>
class TenPercentOffNextOrderReward {
    private $name = '10% Off Your Next Order';

    private $description = 'Take 10% off your next order on our website!';

    public function createCoupon() {
        // create a coupon for this reward
    }
}

class FreeShirtReward {
    private $name = 'Free T-Shirt';

    private $description = 'Get a free t-shirt!';

    public function sendShirt() {
        // send tshirt to customer
    }
}

因此,正如您所看到的,每种奖励类型都有不同的功能。这是处理此类设置的最佳方法吗?我的
奖励表是否应该只存储所有奖励的不同类名?我甚至需要一个
奖励表吗?

根据我的经验,拥有一个包含任何冗余数据(如名称、描述等)的表是更好的做法,因为这也有助于以后能够使用web界面输入新的奖励。然后,应该使用一些服务器端逻辑(就像您在上面的类中所做的那样)指定特定于奖励的显示规则,或者只使用某种模板机制,并通过存储在您的类中的模板id引用它们。事实上,即使模板id也可以与匹配的模板一起存储在数据库的查找表中,使其在将来也可以编辑

所以我不仅要把它放在数据库中,而且如果你想定制你的显示模板,你可以考虑增强你的数据库来适应它,而不是降低它。


一般来说,数据库表有助于存储具有相似属性(如可能的奖励)的多个实例,并且类有利于定义行为(它们如何显示),因此,不会使用错误的路径来考虑使用类,但我会确保将这些奖励的数据实际存储在数据库中,并且只在编程代码中处理它们的行为,而不是数据本身。

根据我的经验,拥有一个包含任何冗余数据(如名称、描述等)的表是更好的做法,因为这也有助于以后使用网络界面输入新奖励。然后,应该使用一些服务器端逻辑(就像您在上面的类中所做的那样)指定特定于奖励的显示规则,或者只使用某种模板机制,并通过存储在您的类中的模板id引用它们。事实上,即使模板id也可以与匹配的模板一起存储在数据库的查找表中,使其在将来也可以编辑

所以我不仅要把它放在数据库中,而且如果你想定制你的显示模板,你可以考虑增强你的数据库来适应它,而不是降低它。


一般来说,数据库表有助于存储具有相似属性(如可能的奖励)的多个实例,并且类有利于定义行为(它们如何显示),因此,不会使用错误的路径来考虑使用类,但我只需要确保将有关这些奖励的数据实际存储在数据库中,并且只在编程代码中处理它们的行为,而不是数据本身。

如果奖励可能有自己的业务逻辑(如发送衬衫),则最好使用类

interface RewardInterface
{
    public function getName();

    public function getDescription();

    public function reward();
}

class NextOrderReward implements RewardInterface
{
    private $percent;

    public function __construct($percent = 10)
    {
        $this->percent = $percent;
    }

    public function getName()
    {
        return $this->percent.'% Off Your Next Order';
    }

    public function getDescription()
    {
        return 'Take '.$this->percent.'% off your next order on our website!';
    }

    public function reward()
    {
        // create coupon
    }
}

class FreeShirtReward implements RewardInterface
{
    public function getName()
    {
        return 'Free T-Shirt';
    }

    public function getDescription()
    {
        return 'Get a free t-shirt!';
    }

    public function reward()
    {
        // send tshirt to customer
    }
}
用法

$rewards = [new NextOrderReward(), new NextOrderReward(20), new FreeShirtReward()];

<ul> 
    @foreach($rewards as $reward) 
        <li>{{ $reward->getName() }} <span>{{ $reward->getDescription() }}</span></li>
    @endforeach
</ul>

注意,如果奖励没有特定的业务逻辑,那么使用类可能过于工程化。

如果奖励可能有自己的业务逻辑(如发送衬衫),那么最好使用类

interface RewardInterface
{
    public function getName();

    public function getDescription();

    public function reward();
}

class NextOrderReward implements RewardInterface
{
    private $percent;

    public function __construct($percent = 10)
    {
        $this->percent = $percent;
    }

    public function getName()
    {
        return $this->percent.'% Off Your Next Order';
    }

    public function getDescription()
    {
        return 'Take '.$this->percent.'% off your next order on our website!';
    }

    public function reward()
    {
        // create coupon
    }
}

class FreeShirtReward implements RewardInterface
{
    public function getName()
    {
        return 'Free T-Shirt';
    }

    public function getDescription()
    {
        return 'Get a free t-shirt!';
    }

    public function reward()
    {
        // send tshirt to customer
    }
}
用法

$rewards = [new NextOrderReward(), new NextOrderReward(20), new FreeShirtReward()];

<ul> 
    @foreach($rewards as $reward) 
        <li>{{ $reward->getName() }} <span>{{ $reward->getDescription() }}</span></li>
    @endforeach
</ul>

请注意,如果没有具体的奖励业务逻辑,那么使用课程可能过于工程化。

尽量避免这些基于意见的问题;它们被认为是堆栈溢出的主题。也就是说,我会使用一个表/模型,将表与代码连接起来,这样一个代码就可以有很多奖励;它们被认为是堆栈溢出的主题。也就是说,我会使用一个表/模型,将表与代码连接起来,这样一个代码就可以有很多奖励;它们被认为是堆栈溢出的主题。也就是说,我将使用一个表/模型,将表加入代码,这样一个代码就可以有很多奖励。谢谢,这很有帮助。如果一个
code
只有特定的奖励与之关联,该怎么办?在这种情况下,我需要以编程方式访问奖励。因此,我将创建一个将代码与奖励连接起来的表,然后我的
code
模型将需要一个
getRewards()
方法。在这种情况下,我是否应该将相关的奖励类名存储在数据库中,以便在调用
getRewards()
时,可以循环使用它们并实例化相应的对象?我认为在DB中存储类名没有意义。DB不应该知道关于PHP代码的任何信息。我更新了答案,显示了立即实例化给定接口实现的所有类。谢谢,这很有帮助。如果一个
code
只有特定的奖励与之关联,该怎么办?在这种情况下,我需要以编程方式访问奖励。因此,我将创建一个表,将代码与奖励连接起来,然后创建我的
代码