【问题标题】:Typecast eloquent relation laravel类型转换雄辩的关系 laravel
【发布时间】:2019-12-20 12:12:27
【问题描述】:

我有 2 个模型 Tour.phpItinerary.php 在一对多关系中:

Tour.php

    public function itinerary()
{
    return $this->hasMany('App\Itinerary', 'tour_id')->orderBy('day', 'asc');
}

Itinerary.php

    public function tour() 
{
    return $this->belongsTo('App\Tour', 'tour_id');
}

itineraries 表由以下列组成:

id |tour_id |天 |详情

day & detail 列属于字符串类型。

我想按天数升序打印旅行的行程。

如何将字符串更改为整数?

我正在视图中使用 foreach 循环打印输出:

@foreach($tour->itineraries as $item)
  {{$item->day}}
  {{$item->detail}}
@endforeach

我已经在模型中尝试了 cast 方法:

    protected $casts = [
    'day' => 'integer',
    ];

和存取器

public function castDayToInt($value)
{
    return (int)$value;
}

但没有得到预期的结果。

以上代码的当前输出:

  • 第 1 天
  • 第 11 天
  • 第 12 天
  • ....
  • 第 2 天
  • 第 20 天
  • 第 21 天

预期输出

  • 第 1 天
  • 第 2 天
  • 第 3 天
  • .....
  • 第 21 天

【问题讨论】:

  • 我不确定我是否关注这个问题。当你做什么时,你期望在哪里得到什么结果?你目前得到什么结果?看起来你只是在呼应这个价值?当它被回显时,无论如何它只是网站上的文本。 HTML 没有任何“数据类型”的概念
  • 我发现你的hasMany方法不是复数,但是你用复数来称呼它
  • @MagnusEriksson 我得到了这种格式的行程1101112..2``20``22我期待这种格式的输出。 123..22
  • 所以真正的问题是关于数字的顺序day 值如何存储在数据库中?作为 int 还是作为 varchar?由于在返回数据之前在数据库中进行了排序/排序,因此在 Laravel after 结果来自 db(已经排序) 中转换字符串和 int 并不重要跨度>
  • 它是数据库中的 varchar。我想知道为什么 cast & accessor 不起作用

标签: php laravel eloquent laravel-6


【解决方案1】:

最好的解决方案是在 DB 中更改您的日期类型,

如果你还需要 varchar 类型,你可以这样做:

public function itineraries()
{
    return $this->hasMany('App\Itinerary', 'tour_id')->orderByRaw('CONVERT(day, UNSIGNED) ASC');
}

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2013-06-04
    • 2016-11-26
    • 2018-02-19
    • 2015-03-14
    • 2018-11-28
    • 2015-01-11
    相关资源
    最近更新 更多