在Laravel中使用参数调用模型函数

时间:2017-10-10 10:17:31

标签: php laravel eloquent blade laravel-5.5

我有两个属于一对多关系的模型

Tour.php

class Tour extends Model{
protected $table = 'tours';

  public function datePrice()
  {
    return $this->hasMany('App\DatePrice', 'tour_id')->orderBy('start', 'asc');
  }    
}

DatePrice.php

class DatePrice extends Model
{
 public $timestamps = false;
 protected $table = 'dateprice';
 protected $fillable = [
'tour_id',
'start_day',
'start_month',
'start_year',
'end_day',
'end_month',
'end_year',
'price'];
 public function tour() 
 {
    return $this->belongsTo('App\Tour', 'tour_id');
 }

 public function scopeFixedDates($query, $date)
 {
    return $query->where('start_year', '=' , $date);
 }
}

我试图根据作为tour.show路线和视图中的模型函数的参数传递的年份来获取巡视日期。我在show.blade.php视图中获取数据的代码是:

@foreach($tour->datePrice()->FixedDates(date('Y')) as $date)
<tr>
<td>
{{ date("jS M, Y", strtotime($date->start_month.'/'.$date->start_day.'/'.$date->start_year )) }}
</td>
<td>
    {{ date("jS M, Y", strtotime($date->end_month.'/'.$date->end_day.'/'.$date->end_year )) }}
</td>
</tr>
@endforeach

我对上述代码遇到的麻烦是它不会抛出任何错误消息或给我结果。我在2017年的第一行填充了2017年的开始年份。该表应填充数据,但它是空的。当我在foreach循环中转储并死掉{{$date}}时,结果是空白页面。如果有人能够指出我正在制作的错误或建议其他替代方式来获得我想要的输出,我将感激不尽。

2 个答案:

答案 0 :(得分:0)

您不以这种方式访问​​关系:

$tour->datePrice()

而是使用魔术属性:

$tour->date_price

我觉得最好使用不同情况下的范围:

$tour->date_price->fixedDates(date('Y')

答案 1 :(得分:0)

@foreach($tour->datePrice()->FixedDates(date('Y'))->get() as $date)

但请勿在视图模板中执行此操作,首先在控制器中准备数据并将其传递给视图:

// controller
view(..)->with(['dates' => $tour->datePrice()->FixedDates(date('Y'))->get()]);

// view
@foreach($dates as $date)

您的代码有点工作的原因是您将Eloquent\Builder类传递给foreach,因此,它是构造的有效参数,但它不是做你想要/期望的事情。