Laravel Nova 4中为BelongsTo字段设置日期格式求助
在Laravel Nova 4中为BelongsTo字段应用一致的日期格式
你遇到的问题核心是:BelongsTo字段的displayUsing回调接收的参数是关联的模型实例,而非直接的日期对象,所以直接调用format()方法会失效。下面是两种可行的解决方式:
方法一:直接在displayUsing中格式化关联模型的日期字段
针对你的ShipmentSentDate和ShipmentEtaDate字段,修改代码如下:
// Resource3中的BelongsTo字段 BelongsTo::make('ShipmentSentDate', 'shipmentSentDate') ->displayUsing(fn ($model) => $model ? $model->shipment_sent_date->format('D d/m/Y') : ''), BelongsTo::make('ShipmentEtaDate', 'shipmentEtaDate') ->displayUsing(fn ($model) => $model ? $model->shipment_eta_date->format('D d/m/Y') : ''),
注意:这里的
shipment_sent_date和shipment_eta_date需要替换为你关联模型中实际的日期字段名,同时确保该字段在模型中已被转为Carbon实例(Laravel 8+默认会自动转换datetime/timestamp类型字段,也可以手动在模型的$casts中声明:protected $casts = ['shipment_sent_date' => 'datetime'];)
方法二:通过模型访问器复用格式逻辑
如果想在多个地方复用日期格式化规则,可以在关联模型中定义访问器:
1. 在关联模型(比如Resource2对应的ShipmentSent模型)中添加访问器
public function getFormattedShipmentSentDateAttribute() { return $this->shipment_sent_date?->format('D d/m/Y'); }
2. 在Resource3的BelongsTo字段中调用该访问器
BelongsTo::make('ShipmentSentDate', 'shipmentSentDate') ->displayUsing(fn ($model) => $model?->formatted_shipment_sent_date),
同理,Resource1对应的模型也可以添加类似的访问器,用于ShipmentEtaDate的格式化。
内容的提问来源于stack exchange,提问作者Antonio Graziani
相关产品推荐
相关产品推荐

