0

大家好,我正在尝试检索我的列,该列有一个带有 json 响应的 zerofill 规范,但似乎 php 忽略了那里的零,所以我尝试使用str_pad与 zerofill 做相同的工作,但它也忽略了它! !那么我该如何解决这个问题呢?这是我的代码

public function getGeneralPost(){
    $post =Post::inRandomOrder()->orderBy('created_at', 'DESC')->get();
    foreach ($post as $item){
        $categories = Category::where('id' , $item->post_subtype)->select('category_title')->first();
        $categories_type = Category::where('id' , $item->post_type)->select('category_title')->first();
        $item->post_subtype = $categories->category_title;
        $item->post_type = $categories_type->category_title;
        $item->id = str_pad($item->id ,10,'0',STR_PAD_LEFT);// here I am usting str_pad     
    }
    $success['posts'] =$post;
    return response()->json(['code'=>'success','success' => $success], $this->successStatus);
}
4

2 回答 2

1

当您检索数据时,它已经忽略了零。我认为您需要一个访问器:

function getIdAttribute($value) {
    return str_pad($value, 10, '0', STR_PAD_LEFT);
}

希望这可以帮助。

于 2018-04-14T12:42:47.147 回答
1

id正如评论中已经指出的那样,该列似乎有一个默认转换为int,这将恢复您通过str_pad().

为了规避这个问题,您可以将填充id的内容存储在没有强制转换的单独字段中,或者您可以获取对象的属性,更改它们并使用它们来返回结果,而不是更改对象。

仅从框架代码本身,也可以$keyType在返回对象之前覆盖对象的属性:

public function getGeneralPost() {
    $post = Post::inRandomOrder()->orderBy('created_at', 'DESC')->get();
    foreach ($post as $item) {
        $categories = Category::where('id' , $item->post_subtype)->select('category_title')->first();
        $categories_type = Category::where('id' , $item->post_type)->select('category_title')->first();
        $item->post_subtype = $categories->category_title;
        $item->post_type = $categories_type->category_title;

        $item->setKeyType('string');
        $item->id = str_pad($item->id ,10,'0',STR_PAD_LEFT);
    }
    $success['posts'] = $post;
    return response()->json(['code'=>'success','success' => $success], $this->successStatus);
}
于 2018-04-14T12:46:52.577 回答