首页 > 解决方案 > 类型转换雄辩的关系 laravel

问题描述

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

旅游.php

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

行程.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;
}

但没有得到预期的结果。

上述代码的当前输出:

预期产出

标签: phplaraveleloquentlaravel-6

解决方案


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

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

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

推荐阅读