2013-07-04 54 views
0

我試圖製作一個電視時間表,其中當前和下一個即將播放的節目顯示的每個頻道。 我想要做這樣的事情:Laravel 4雄辯的查詢來結合單個表中的數據

  <table class="table"> 
       <thead> 
        <tr> 
         <th></th> 
         <th>Now Playing</th> 
         <th>Next Upcoming Show</th> 
        </tr> 
       </thead> 
       <tbody> 
       @foreach ($shows as $show) 
        <tr> 
        <td> 
         <strong>{{ $show->channel->name}}</strong></td> 
        <td><strong>{{ date('H:i', strtotime($show->now->start)) }}</strong> 
         {{ $show->now->title }}</td> 
        <td><strong>{{ date('H:i', strtotime($show->next->start)) }}</strong> 
         {{ $show->next->title }}</td> 
        </tr> 
       @endforeach   
       </tbody> 
      </table> 

我得到了現在玩秀是這樣的: $顯示=顯示::用( '通道') - >在哪裏( '開始','< = '',DB :: raw('(NOW() - INTERVAL 15 SECOND)')) - > where('end','>',DB :: raw('(NOW()+ INTERVAL 15 SECOND)') ) - > orderBy('start') - > get();

我似乎無法在同一個查詢中獲取每個頻道的下一個即將播出的節目。 這將是很酷,如果我可以像這樣的當前節目:$ show-> now-> start併爲下一個節目:$ show-> next-> start

任何想法?

我的DB:

Schema::create('channels', function(Blueprint $table) {  
     $table->increments('id'); 
     $table->string('name', 200); 
     $table->timestamps(); 
    }); 

    Schema::create('shows', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('channel_id'); 
     $table->string('title', 255); 
     $table->text('description')->nullable(); 
     $table->dateTime('start'); 
     $table->dateTime('end'); 
    }); 
+1

有關您的數據庫結構的更多信息,或者您試圖生成的原始查詢,肯定會有所幫助。 – rmobis

回答

0

也許會更容易做到這一點的其他方式?循環它由渠道和做$channel->next->...$channel->now->...

在你Channel模型,你可以這樣做:

public function next() 
{ 
    // Change this for your "get next" query 
    return $this->hasOne('Show')->where('start', '<=', DB::raw('(NOW() - INTERVAL 15 SECOND)')) ->where('end', '>', DB::raw('(NOW() + INTERVAL 15 SECOND)')) ->orderBy('start'); 
} 

public function now() 
{ 
    return $this->hasOne('Show')->where('start', '<=', DB::raw('(NOW() - INTERVAL 15 SECOND)')) ->where('end', '>', DB::raw('(NOW() + INTERVAL 15 SECOND)')) ->orderBy('start'); 
} 

然後做:

$channels = Channel::with(array('next', 'now'))->get(); 

@foreach($channels as $channel) 
    Now: {{ $channel->now->title }} <br> 
    Next: {{ $channel->next->title }} 
@endforeach 

我根本沒有測試過,這只是一種思想HT /建議。

+0

哇Jesper!那些工作就像一個魅力!不知道你可以在模型中做到這一點!感謝您的幫助! –