Laravel模板化,不检查是否存在关系

时间:2014-03-26 00:14:39

标签: laravel laravel-4 eloquent

我在两个模型之间有一个关系,它由以下定义:

class Appartement extends Eloquent {
    public function lang()
{
    return $this->hasOne('AppartementLang')->where('language_id', '=', '2');
}
}

没什么大不了的。

当我尝试做类似的事情时:

    @foreach ($appartements as $appartement)
    {{$appartement->lang->title}}<br/>
    {{$appartement->lang->subtitle}}<br/>
    {{link_to('/appartements/'.$appartement->link_rewrite, Lang::get('Discover'))}}<br/>
@endforeach

并且lang不存在,然后laravel抛出错误,这是非常合乎逻辑的。

我想知道是否有一些神奇的方法可以让我不自动验证关系存在的验证。基本上不要把它变成一个大的“if exists then use”,用​​于类的每个属性:

@foreach ($appartements as $appartement)
    @if($appartement->lang){{$appartement->lang->title}}<br/>@endif
    @if($appartement->lang){{$appartement->lang->subtitle}}<br/>@endif
    {{link_to('/appartements/'.$appartement->link_rewrite, Lang::get('Discover'))}}<br/>
@endforeach

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

我确信有很多方法可以做到(或至少尝试)

有这个选项来检查现有和供应默认,如果没有,我认为这是4.1中的新功能(或者至少对我来说是新的):

@foreach ($appartements as $appartement)
  {{ $appartement->lang->title or "default if doesn't exist" }}<br/>
  {{ $appartement->lang->subtitle or "default text if doesn't exist" }}<br/>
  {{ link_to('/appartements/'.$appartement->link_rewrite, Lang::get('Discover')) }}<br/>
@endforeach

或者您可以尝试使用这三个if语句中的一个,如果您不希望根据lang的存在而显示该特定记录的任何内容......

@foreach ($appartements as $appartement)
  @if ($appartement->lang)
  // or maybe:
  // @if ($appartement::has('lang'))
  // or also maybe:
  // @if ($appartement->lang->count())
    {{ $appartement->lang->title or "default if doesn't exist" }}<br/>
    {{ $appartement->lang->subtitle or "default text if doesn't exist" }}<br/>
    {{ link_to('/appartements/'.$appartement->link_rewrite, Lang::get('Discover')) }}
    <br/>
  @endif
@endforeach
相关问题