从数据库

时间:2017-01-06 09:25:04

标签: php laravel

   $rankArray = [
        'ranks' => $product[0]['productSalesRank']->pluck('rank'),
        'dates' => $product[0]['productSalesRank']->pluck('created_at')
    ];


    $rankArray['dates']->transform(function ($item) {
        return $item->format('d-m-Y');
    });

每次从数据库中检索created_at / updated_at日期时必须进行转换似乎效率低下,是否有更简单的方法来执行此操作?

我想将日期保留为Carbon,但在某些情况下,只需要“值”

3 个答案:

答案 0 :(得分:2)

在productSalesRank的模型(?)中设置一个getter,它可以完成准备日期的所有工作。

型号:

class ProductSalesRank extends Model
{
   protected $dates = ['created_at', 'updated_at']; 
   // whatever other columns you want to use Carbon on ^.

   public function getCreatedAtHumanAttribute() {
       return $this->created_at->format('d-m-Y');
   }
}

查看/控制器/只要:

$productSalesRank->created_at_human;  // will print it like you defined it in the model.

为什么_human?

有时候在代码的后面你会发现自己需要在created_at值上使用Carbon功能。当你使用format()时,它会返回一个从Carbon特征中删除的字符串。

[更新]

早些时候我们创建了一个getter / accessor。据我所知,你不能传递像:

这样的变量

->created_at_human('mm')因为它不是方法,所以它是一个访问者。

在您的模型中,创建一个函数。

public function myFunction($format) {
   return $this->created_at->format($format);
}

在您看来,简单:

$productSalesRank->myFunction('d-m-Y');

答案 1 :(得分:0)

您可以为模型添加一个访问者,自动将数据转换为所需的格式。更多关于:https://laravel.com/docs/5.2/eloquent-mutators#accessors-and-mutators

答案 2 :(得分:0)

在表格相关模型中,

class ModelName{

        //add this line
        protected $dates = ['created_at','updated_at'];
}

在模型中定义$dates会自动为您提供日期的碳实例。