【问题标题】:Laravel Eloquent Pluck produced incorrect dataLaravel Eloquent Pluck 产生了不正确的数据
【发布时间】:2020-09-30 15:11:17
【问题描述】:

尝试使用 pluck 获取 created_at 日期。

        $campaigns_dates = CampaignHistory::where('status', "Complete")->orderBy( 'created_at', 'ASC' )->pluck('created_at');
        $campaigns_dates = json_decode( $campaigns_dates );
        return $campaigns_dates;

//得到这个

["2020-06-29T14:19:03.000000Z","2020-06-29T14:19:42.000000Z","2020-07-29T14:23:54.000000Z","2020-08-28T14:55:53.000000Z","2020-08-29T14:17:40.000000Z","2020-09-29T14:18:27.000000Z","2020-09-29T14:21:13.000000Z"]

//但是想要这个

Example: ["2020-06-29 14:19:03","2020-06-29 14:19:42"]

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    您可以使用地图操作将您的日期重新格式化为您的给定格式:

    public function index() {
     
        $campaigns_dates = CampaignHistory::orderBy('created_at', 'ASC')
            ->pluck('created_at')
            ->map
            ->format('Y-m-d H:i:s');
    
        $campaigns_dates = json_decode($campaigns_dates);
        return $campaigns_dates;
    }
    

    替代解决方案:有selectRaw() 方法的替代解决方案,感谢@OMR 提供此解决方案:

    public function index() {
     
        $campaigns_dates = CampaignHistory::orderBy('created_at', 'ASC')
            ->selectRaw("DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') as formatted_date")
            ->pluck('formatted_date');
    
        $campaigns_dates = json_decode($campaigns_dates);
        return $campaigns_dates;
    }
    

    【讨论】:

    • 不用担心......你可以使用你所拥有的,但他们必须将模型序列化为数组,然后从数组中提取这些字段
    • 旁注:使用集合提供的高阶函数,如果您愿意,可以删除匿名函数:$campaigns_dates->map->format(....);(仅供参考)
    • @lagbox 谢谢你,我真的从你的 cmets 和答案中得到了帮助
    • 我还可以建议:selectRaw("DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') as formatted_date") ->pluck(' formatted_date')
    • 如果你想进一步简化它,只需返回整个语句(它是一个集合,它会为你转换为 JSON)但现在我们只是玩一小块为此编写代码:-}
    【解决方案2】:

    您的日期结构与您存储在 DB 中的日期结构相同。 要更改 ID,请在 CampaignHistory 模型中使用 castshttps://laravel.com/docs/8.x/eloquent-mutators#date-casting

    protected $casts = [
        'created_at' => 'datetime:Y-m-d H:i:s',
    ];
    

    或者你可以在循环中使用函数format

    【讨论】:

    • 来自您链接的文档“当 model 序列化为数组或 JSON 时将使用此格式”
    • 他们必须将他们的模型序列化为一个数组,然后拉取字段才能使用它
    【解决方案3】:

    您也可以为此使用访问器 ..为此,您只需将其放入模型中即可

    public function getCreatedAtAttribute($value)
    {
         return Carbon::parse($value)->format('Y-m-d H:i:s') //or what format you need
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2017-03-07
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2016-12-06
      相关资源
      最近更新 更多