Laravel:如果用户是RecentlyCreated充值平衡

时间:2018-01-21 20:26:05

标签: php laravel laravel-5

我的开发人员离开了,所以我需要自己完成我们的项目。

我正在使用C#进行自动化,所以有一些编码知识。

问题是: 如何正确充值新用户的平衡?

  • 我在SQL表中 - 用户,其中存储了所有用户。 (user_id + 姓名/姓氏+注册日期)
  • 我在SQL表user_balance中,其中所有具有余额的用户都是 存储(user_id + balance ammount)

所以,我需要以某种方式向新用户赠送一些钱。

我是否需要使用刀片视图,并尝试使用

@if user reg date == bla bla
sql query
@else
ignore
@endif

或者,最好用控制器,模型创建?

2 个答案:

答案 0 :(得分:1)

正如@Nate指出的那样,模型事件将为您提供所需内容,不管怎样,我使用Creating事件而不是Created,因为您可以在记录保存时设置余额,保存更新查询。

您绝对不希望在刀片视图中执行此操作。尝试将所有业务逻辑保留在视图文件之外,并包含在控制器/模型/事件侦听器等中。

您可以通过在模型的静态引导方法中添加事件处理来简化其他答案。

public static function boot()
{
    parent::boot();

    static::creating(function($model)
    {
         $model->balance = 100;
    });
}

答案 1 :(得分:0)

从另一个类似的答案中,您需要在创建用户时使用事件

在用户的模型中,您可以创建如下的事件处理程序:

/**
 * The event map for the model.
 *
 * @var array
 */
protected $dispatchesEvents = [
    'created' => \App\Events\UserCreatedEvent::class,
];

然后你可以创建一个这样的事件:

<强> UserCreatedEvent

<?php

namespace App\Events;

use App\User;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;

class UserCreatedEvent
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $user;

    /**
     * Create a new event instance.
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

然后你可以创建一个监听器来创建平衡:

<强> UserCreatedListener

<?php

namespace App\Listeners;

use Illuminate\Support\Facades\Mail;
use App\Events\UserCreatedEvent;

class UserCreatedListener
{
    /**
     * Create the event listener.
     */
    public function __construct()
    {
    }

    /**
     * Handle the event.
     *
     * @param UserCreatedEvent $event
     */
    public function handle(UserCreatedEvent $event)
    {
        // update their balanace here
        $event->user->update(['balance' => 1000]);
    }
}

然后在你的eventserviceprovider.php里面添加

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    'App\Events\UserCreatedEvent' => [
        'App\Listeners\UserCreatedListener',
    ],
];