处理Laravel的关系

问题描述 投票:1回答:1

我正在构建一个支持推荐计划的系统。它允许您跟踪链接,程序以及cookie的持续时间。还允许您在引用其他用户(例如注册)后轻松决定用户将如何受益。

这用于在创建引荐链接时生成唯一的引用代码。我可以使用此代码来跟踪链接,并将其与共享链接的原始用户相关联。工厂方法getReferral为给定程序的每个用户创建单个引用链接。

// ReferralLink Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Ramsey\Uuid\Uuid;

class ReferralLink extends Model
{
    protected $fillable = ['user_id', 'referral_program_id'];

    protected static function boot()
    {
        static::creating(function (ReferralLink $model) {
            $model->generateCode();
        });
        parent::boot();
    }

    private function generateCode()
    {
        $this->code = (string)Uuid::uuid1();
    }

    public static function getReferral($user, $program)
    {
        return static::firstOrCreate([
            'user_id' => $user->id,
            'referral_program_id' => $program->id
        ]);
    }

    public function getLinkAttribute()
    {
        return url($this->program->uri) . '?ref=' . $this->code;
    }

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function program()
    {
        return $this->belongsTo(ReferralProgram::class, 'referral_program_id');
    }

    public function relationships()
    {
        return $this->hasMany(ReferralRelationship::class);
    }

}

StoreReferralCode中间件

use App\ReferralLink;

// ...

public function handle($request, Closure $next)
{
    $response = $next($request);

    if ($request->has('ref')){
        $referral = ReferralLink::whereCode($request->get('ref'))->first();
        $response->cookie('ref', $referral->id, $referral->lifetime_minutes);
    }

    return $response;
}

UserReferred事件处理程序

class UserReferred
{
    use SerializesModels;

    public $referralId;
    public $user;

    public function __construct($referralId, $user)
    {
        $this->referralId = $referralId;
        $this->user = $user;
    }


    public function broadcastOn()
    {
        return [];
    }
}

当然这是'我如何在RegistrationController上播放活动

protected function create(array $data)
{

    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);

    event(new \App\Events\UserReferred(request()->cookie('ref'), $user));

    return $user;
}

我无法在数据库中创建关系,因为谁与谁共享链接。我的代码有什么问题?

//referral_relationships schema

Schema::create('referral_relationships', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('referral_link_id');
            $table->integer('user_id');
            $table->timestamps();
        });
php mysql laravel
1个回答
0
投票

你可以尝试这样:

 Schema::create('referral_relationships', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('referral_link_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->foreign('referral_link_id')->references('id')->on('referral_links')
             ->onDelete('cascade');
        $table->foreign('user_id')->references('id')->on('users')
             ->onDelete('cascade');
        $table->timestamps();
    });
© www.soinside.com 2019 - 2024. All rights reserved.