【问题标题】:Laravel nested select and conditional statement in view blade视图刀片中的 Laravel 嵌套选择和条件语句
【发布时间】:2020-01-18 02:38:05
【问题描述】:

所以我已经成功地制作了当月的日历显示。这一次,我想显示特定日期的事件详细信息。我不确定如何获取$event 的数据,其中$event == $date

这是控制器。我有要在视图中使用的事件和日期:

$event = Event::where("started_at", '>=', Carbon::now()->subDays(30)->toDateTimeString())
         ->orderBy("started_at", "asc")
         ->first();
$data["event"] = $event;
$data["month"] = Carbon::now()->month;
$data["dates"] = range('1', date('t'));
return view('event.all', $data);

这是event.all 视图:

@foreach($dates as $date)
    <div class="seven-cols">
        <div class="titlehead">
            <h6>{{$date}}</h6>
            <h6 style="color: lightgrey;">{{date("D", mktime(0, 0, 0, $month, $date))}}</h6>
            <div style=" ">{{$eventdate = date('d',strtotime(@$event->started_at))}}</div>
            @if($event->started_at == $date)
                <div>Test</div>
            @endif
        </div>
    </div>
@endforeach

这段代码我得到了什么:

【问题讨论】:

    标签: html laravel-5 eloquent


    【解决方案1】:

    正如this other answer 建议的那样,我将使用CarbonPeriod(或者如果CarbonPeriod 对您不可用,则创建一个带有循环的范围),然后同时收集每个日期的事件。

    作为一种好的做法,我们应该避免在模板中保留太多逻辑,因此在实际构建模板本身之前尽可能多地构建内容。

    使用您的示例,并假设您只想每天显示一个事件,我们可以有这样的事情:

    (虽然没有测试代码)

    $startDate = Carbon::now()->subDays(30)->toDateTimeString();
    $endDate = Carbon::now()->toDateTimeString();
    
    // Narrow down the list from the database
    $events = Event::whereBetween("started_at", [$startDate, $endDate])
        ->orderBy("started_at")
        ->get();
    
    $data = CarbonPeriod::create(
        $startDate, 
        $endDate
    )
    ->map(function(Carbon $date) {
        $event = $events
           ->where("started_at", $date->toDateTimeString())
            ->first();
    
        return [
            "date" => $date,
            "event" => $event,
        ];
    });
    
    return view('event.all', $data);
    

    在模板中:

    @foreach($data as $day)
        <div class="seven-cols">
            <div class="titlehead">
                <h6>{{$day["date"]->day}}</h6>
                <h6 style="color: lightgrey;">{{$day["date"]->format("D")}}</h6>
                <div style=" ">{{$day["date"]->format("d")}}</div>
                    @if(!is_null($day["event"]))
                        <div>{{$day["event"]->someTextField}}</div>
                    @endif
                </div>
            </div>
        </div>
    @endforeach
    
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-17
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多