类型转换雄辩关系laravel

时间:2019-12-20 12:12:27

标签: php laravel eloquent laravel-6

我在一对多关系中有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 |天细节

daydetail列是字符串类型。

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

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

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

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

我在模型中尝试过强制转换方法:

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

和访问者

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

但没有得到预期的结果。

以上代码的当前输出:

  • 第一天
  • 第11天
  • 第12天
  • ....
  • 第二天
  • 第20天
  • 第21天

预期产量

  • 第一天
  • 第二天
  • 第3天
  • .....
  • 第21天

1 个答案:

答案 0 :(得分:1)

最好的解决方案是更改数据库中的日期类型

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

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