我正在尝试制作电视节目表,其中显示每个频道的当前和下一个即将到来的节目。 我想做这样的事情:
<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>
我现在正在播放这样的节目: $ shows = Show :: with('channel') - &gt; where('start','&lt; =',DB :: raw('(NOW() - INTERVAL 15 SECOND)')) - &gt; where('end','&gt;',DB :: raw('(NOW()+ INTERVAL 15 SECOND)')) - &GT; ORDERBY( '开始') - &GT;得到();
我似乎无法在同一查询中获得每个频道的下一个节目。 如果我能为当前的节目做这样的事情会很酷:$ show-&gt; now-&gt; start和下一个节目:$ show-&gt; next-&gt; start
任何想法?
我的数据库:
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');
});
答案 0 :(得分: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
我根本没有测试过,这只是一个想法/建议。