gpt4 book ai didi

php - 处理Laravel中的关系

转载 作者:行者123 更新时间:2023-11-30 21:32:34 25 4
gpt4 key购买 nike

我正在建立一个支持推荐程序的系统。它允许您跟踪链接,程序以及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();
});

最佳答案

您可以这样尝试:

 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();
});

关于php - 处理Laravel中的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55453986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com