【问题标题】:Laravel eloquent gives array of numbers, instead of integersLaravel eloquent 给出数字数组,而不是整数
【发布时间】:2018-01-29 19:46:25
【问题描述】:

我正在尝试将 id 作为字符串返回并通过 api 传递它们(稍后用于选择)

使用 Laravel 资源:

public function toArray($request)
{

    return [
        'speciality' => $this->specialities()->pluck('speciality_id')
    ];
}

它返回一个数字数组,例如:

[1, 3, 5, 7]

如何在 eloquent 查询中转换它们并像字符串一样返回?

["1", "3", "5", "7"]

【问题讨论】:

  • 这没有意义,为什么你需要 id 作为字符串?您能否在需要将其作为字符串的地方显示此数据的可用性。
  • 用于编辑页面,我有表单选择字段,它不接受数字数组,只接受字符串(vue js)
  • 您可以将其映射到 strval 函数上。 $this->specialities()->pluck('speciality_id')->map('strval')
  • @Dencker 这是更好的方法,但会报错:strval() expects exactly 1 parameter, 2 given
  • @gileneusz 啊。这只是一个警告,可以安全地忽略或抑制。如果您想按书行事,可以改为->map(function($item){ return strval($item); })

标签: laravel eloquent


【解决方案1】:

您可以通过数组 loop,将 cast 它添加到字符串并添加到 new array,因为它仅适用于 specific 案例。

$a = [1, 3, 5, 7];
$b = array();
foreach($a as $as)
        $b[] = (string)$as;

return $b;

或者更好地使用array_map() -

$a = array_map(function($value){
        return (string) $value;
}, $a);

【讨论】:

  • 谢谢,这个好像比强制转换好,我试试
  • 强制转换适用于所有情况,但对于特定情况,您可以尝试转换 laracasts.com/series/incremental-api-development/episodes/4 并将此逻辑放在那里
  • 我会看看在这个转换之后同步多对多关系表会发生什么
【解决方案2】:

有点糟透了,不过如果没办法的话 cast 字符串

protected $casts=[
    'speciality_id'=>'string'
];

【讨论】:

  • 为了让 Vue 组件接受它而将主键全局转换为字符串似乎很糟糕。
  • 我稍后会修复它,使其不适用于主键,只需在表上添加新列。这是非常糟糕的做法,我知道我现在在做什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 2017-03-26
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多