gpt4 book ai didi

laravel - Eloquent - 可以根据查询动态创建关系

转载 作者:行者123 更新时间:2023-12-02 04:23:03 25 4
gpt4 key购买 nike

我有 2 个型号的优惠券和产品。

一张优惠券可以包含多个产品。

关键是它可能是一些不同的组合(例如 productA + productB,或 productA OR productB,等等)

所以我所做的不是在优惠券和产品之间建立关系,而是将产品 ID 像字符串一样存储在我的字段中(例如:1+2,这意味着在购买两种产品时可以使用此优惠券)。

我承认这可能不是我最好的主意......

现在我的问题是我需要根据产品类别(我的产品模型中的一个字段)对我的优惠券提出请求。是否可以进行这样的查询(我最初认为我可以通过 Coupon 上的范围实现它,但我做不到),或者我的数据库结构太糟糕了,我应该更新它并使用多态关系(我也不知道该怎么做)。

这是我的优惠券模型:

class Coupon extends Model {
use Traits\Uuids;


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

static::addGlobalScope(function ($query) {
$query->hasProductCategory();
});
}

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'description',
'products_id',
'client_id',
'facial_value',
'image',
'is_valid',
'begin_date',
'end_date',
'use_case'
];

/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'created_at',
'updated_at'
];


/**
* Indicates if the IDs are auto-incrementing.
*
* @var bool
*/
public $incrementing = false;

/**
* We define our default primary key.
*
* @var string
*/
protected $primaryKey = 'uuid';



/**
* Define if coupon has multiple products or just one
* return bool
*/
public function scopeIsSingleProduct():bool
{
$aProduct = explode("+", $this->products);

return count($aProduct) > 1 ? false : true;
}

public function client()
{
return $this->belongsTo(Client::class, 'client_id');
}

public function cart()
{
return $this->hasMany(Cart::class);
}

public function campaign()
{
return $this->hasMany(Campaign::class);
}

这是产品的模型

class Product extends Model {
protected $fillable = [
'name',
'ean',
'category_id',
'client_id',
'init_price'
];

/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'created_at',
'updated_at'
];

public function client()
{
return $this->belongsTo(Client::class, 'client_id');
}


public function category()
{
return $this->belongsTo(CategoryProduct::class, 'category_id');
}

public function productsId()
{
return preg_split( "/(\+|\|)/", $this->products);
}

感谢您的帮助。

最佳答案

您应该重新考虑您的数据库结构。

优惠券:产品是多对多关系。

这意味着它们将存储在数据透视表中,您可以根据需要进行查询。此外,如果它可以帮助您更轻松地编写查询,您可以为数据透视表创建一个模型。

关于laravel - Eloquent - 可以根据查询动态创建关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57922079/

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