gpt4 book ai didi

php - 有条件地将属性 append 到 Laravel 中的模型

转载 作者:行者123 更新时间:2023-12-03 22:12:32 38 4
gpt4 key购买 nike

每当调用模型范围时,是否可以将属性 append 到我的模型?

例如,在我的 Controller 中,我想调用一个范围来 append 这些动态属性,例如:

$Media_query = OutDoorMedia::query();
$Media_query->orderby('created_at', 'desc');
$Media_query->PreviouslyOrdered();
$Media = $Media_query->get();

在我的模型中,我想做一些类似的事情:
class OutDoorMedia extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'id',
'user_id',
'address',
'location',
'media_type',
];
}

class scopePreviouslyOrdered extends OutDoorMedia
{
public $appends = ['previously_ordered'];

public function getPreviouslyOrderedAttribute()
{
if ($this->hasMany('App\Models\OutDoorMediaOrders', 'odm_id', 'id')->Where(function ($query) {
$query->where('status', MEDIA_ORDER_CHECKOUT_STATUS)
->orWhere('status', STATUS_TO_PAY);
})->exists()) {
return true;
} else {
return false;
}
}

}

但它不起作用,我知道这是错误的,如何实现这一目标?

最佳答案

我在@apokryfos 的帮助下解决了这个问题,但做了一些调整。希望这减少浪费别人的时间。

我没有在模型上 append 属性,而是通过 eloquent 魔术方法将所述属性 append 到我的模型中:

$Media_query = OutDoorMedia::query();
$Media_query->orderby('created_at', 'desc');
$Media = $Media_query->get()->each(function ($items) {
$items->append('previously_ordered');//add this attribute to all records which has the condition
});

在模型中正如 apokryfos 所说,我已经使用了这两种方法:
  public function PreviousOrders() {
return $this->hasMany('App\Models\OutDoorMediaOrders', 'odm_id', 'id');
}

public function getPreviouslyOrderedAttribute() {
return $this->PreviousOrders()->exists();
}

但是我不需要这个方法,我不得不从模型中删除它,因为如果它存在于模型中,它会自动 append 到模型中:
public $appends = [ 'previously_ordered' ];

关于php - 有条件地将属性 append 到 Laravel 中的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53358863/

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