Laravel 5 / Eloquent - Return 基于 created_on 列加上可变小时数的日期
Laravel 5 / Eloquent - Return a Date Based on the created_on Column Plus Variable Hours
我有两个 table:statuses 和 status_logs。
statuses table 有 3 列:id, name, 时长
status_logstable有3列:id,status_id,created_at
我有两个模型是这样的:
class Status extends Model{
// Name of our database table
protected $table = 'statuses';
// Defines the relationship between this table and the status_logs table
public function status_logs(){
return $this->hasMany('App\Models\Status', 'status_id');
}
}
class StatusLog extends Model{
// Name of our database table
protected $table = 'status_logs';
// Defines the relationship between this table and the statuses table
public function statuses(){
return $this->belongsTo('App\Models\Status', 'status_id');
}
}
我可以使用以下方法从两个 table 获取数据:
StatusLog::with('status')->get();
结果类似于:
"status_logs": [{
"id": 1,
"status_id": 1,
"created_at": "02:34:53 10/5/2017",
"statuses": {
"id": 1,
"name": "started"
"duration": 48
}
}]
我想向 status_logs 数组中的每个对象添加一个名为 finish_at 的列.此日期时间将是 created_at 值加上 duration 的整数值。 Duration 是我们需要添加到 created_at 的小时数以获得 [=74 的值=].
结果应如下所示:
"status_logs": [{
"id": 1,
"status_id": 1,
"created_at": "02:34:53 10/5/2017",
"finish_at": "02:34:53 10/7/2017",
"statuses": {
"id": 1,
"name": "started"
"duration": 48
}
}]
我该怎么做?
使用 Carbon (http://carbon.nesbot.com/docs/#api-addsub),可以为您完成类似的工作:
$log->finished_at = $log->created_at->addHours($log->statuses()->duration);
使用 Eloquent appends 可以解决这个问题。
添加附加属性并定义值。它看起来像下面这样。
class StatusLog extends Model
{
protected $appends = ['finish_at'];
public function getFinishedAtAttribute()
{
// carbon to add hours
$dt = Carbon::instance($this->attributes['created_at']);
$dt->addHours($this->statuses->duration);
return $dt->toDateTimeString(); // change to your desire format
}
}
第一步是将持续时间除以 24。
然后使用 using carbon 在 created_at 值中添加分割持续时间
喜欢这个
$log->finished_at = $log->created_at->addDays($log->statuses()->duration/24);
$log->save();
我有两个 table:statuses 和 status_logs。
statuses table 有 3 列:id, name, 时长
status_logstable有3列:id,status_id,created_at
我有两个模型是这样的:
class Status extends Model{
// Name of our database table
protected $table = 'statuses';
// Defines the relationship between this table and the status_logs table
public function status_logs(){
return $this->hasMany('App\Models\Status', 'status_id');
}
}
class StatusLog extends Model{
// Name of our database table
protected $table = 'status_logs';
// Defines the relationship between this table and the statuses table
public function statuses(){
return $this->belongsTo('App\Models\Status', 'status_id');
}
}
我可以使用以下方法从两个 table 获取数据:
StatusLog::with('status')->get();
结果类似于:
"status_logs": [{
"id": 1,
"status_id": 1,
"created_at": "02:34:53 10/5/2017",
"statuses": {
"id": 1,
"name": "started"
"duration": 48
}
}]
我想向 status_logs 数组中的每个对象添加一个名为 finish_at 的列.此日期时间将是 created_at 值加上 duration 的整数值。 Duration 是我们需要添加到 created_at 的小时数以获得 [=74 的值=].
结果应如下所示:
"status_logs": [{
"id": 1,
"status_id": 1,
"created_at": "02:34:53 10/5/2017",
"finish_at": "02:34:53 10/7/2017",
"statuses": {
"id": 1,
"name": "started"
"duration": 48
}
}]
我该怎么做?
使用 Carbon (http://carbon.nesbot.com/docs/#api-addsub),可以为您完成类似的工作:
$log->finished_at = $log->created_at->addHours($log->statuses()->duration);
使用 Eloquent appends 可以解决这个问题。
添加附加属性并定义值。它看起来像下面这样。
class StatusLog extends Model
{
protected $appends = ['finish_at'];
public function getFinishedAtAttribute()
{
// carbon to add hours
$dt = Carbon::instance($this->attributes['created_at']);
$dt->addHours($this->statuses->duration);
return $dt->toDateTimeString(); // change to your desire format
}
}
第一步是将持续时间除以 24。 然后使用 using carbon 在 created_at 值中添加分割持续时间 喜欢这个
$log->finished_at = $log->created_at->addDays($log->statuses()->duration/24);
$log->save();