PHP Laravel - Eloquent 在调用方法 json 时随机返回布尔字段,有时为 0 1,其他为 true false

Posted

技术标签:

【中文标题】PHP Laravel - Eloquent 在调用方法 json 时随机返回布尔字段,有时为 0 1,其他为 true false【英文标题】:PHP Laravel - Eloquent is returning boolean fields randomly sometimes as 0 1 and others as true false when calling the method json 【发布时间】:2019-07-03 23:08:23 【问题描述】:

我正在使用 Laravel Eloquent 编写一个 REST API。当从 response() 调用 json 以返回对象时,布尔字段有时返回为 0/1,有时返回为 false/true。我想统一格式并将其全部设为 0,1 或 false,true 而不是随机的

这里是代码示例:

public function show($id)

    $obj = MyObject::findOrFail($id);
    return response()->json($obj,200);

返回 0,1

并且此代码在创建对象时返回 true,false 不仅用于状态,还用于 $obj 中的布尔值

return response()->json([
        'status' => (bool) $obj,
        'data'   => $obj,
        'message' => $obj ? 'new obj created!' : 'an error has occurred'
    ], 201); 

那么,如何让它们全部为0和1或全部为真或假?

【问题讨论】:

那么你为什么要这样做?因为在 php 中 0 = false 和 1 = true,并且在您的代码中,您也只检查它是真还是假。 @pinoyCoder 因为我正在为使用 java 的 android 应用程序编写 REST API。一致性非常重要,因为我需要为 Object 创建一个等效类并且需要指定布尔字段的类型..和“真实”根据 Gson 与 1 不同 【参考方案1】:

尝试为模型中的所有布尔字段强制转换属性。

protected $casts = [
    'is_published' => 'boolean',
];

【讨论】:

我将此作为我的 clolumn 名称添加到我的模型中,然后这对我来说也很有效,谢谢【参考方案2】:

使用 Laravel 访问器Docs

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model

    public function getIsPublishedAttribute($value)
    
        return $value == 1 ? true : false;
    

它将始终根据您的$value返回。

【讨论】:

但我不想总是返回 true,我的问题不在于 $obj 中带有布尔字段的状态。就像我有 is_published 字段一样。在第一个代码中它返回为 0 和 1然而,当我创建 obj 时,它返回为 truw,false

以上是关于PHP Laravel - Eloquent 在调用方法 json 时随机返回布尔字段,有时为 0 1,其他为 true false的主要内容,如果未能解决你的问题,请参考以下文章

php Laravel 5 Eloquent CheatSheet #laravel #eloquent

php [Eloquent CheatSheet] Eloquent #laravel #eloquent的常见查询方法

php Laravel Eloquent Tips

Laravel 的 Eloquent 公共静态函数“create”在 Model.php 中发生了啥?

PHP 干货5 个 Laravel Eloquent 小技巧

如何使用 Laravel(Eloquent 的)地图收集功能重构 php foreach