首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Laravel视图中使用@if中的行计数?

如何在Laravel视图中使用@if中的行计数?
EN

Stack Overflow用户
提问于 2020-02-18 04:52:40
回答 2查看 218关注 0票数 0

我是全新的拉拉维尔,我运行的版本6。

我希望我的视图显示一个按钮,如果我的MySQL表中有符合特定条件的行,但是我很难在我的Laravel应用程序中找到如何对它进行编码--甚至在哪里编码它。

我的MySQL表名为diary_entries,系统的各种用户将为其贡献零到n行。表的每一行都包含一个名为client的用户id。当给定用户转到Welcome视图时,我希望该视图确定该用户当前在diary_entries表中是否有任何行。如果他这样做了,我想显示一个按钮,它将带他到另一个页面,在那里可以显示、编辑或删除条目。

我想要构造一个@if,它计算该用户的记录数;如果计数大于零,我希望显示该按钮,否则将不显示该按钮。

问题是,我不知道如何编码这个。我看过手册中雄辩的部分中的例子,但它们对我来说并不是特别清楚。我在顶部附近发现一个注释,上面说count()函数期望Collection作为参数,而雄辩语句的结果始终是Collection,因此我猜想,我只需执行一个雄辩的查询,然后将count()应用于结果Collection。但我尝试过的每一种想法都会引发异常。

以下是我认为最合乎逻辑的猜测:

代码语言:javascript
复制
@extends('layout');

@section('content');
<div class="content">
    <img class="centered" src="/images/sleeping-cat.jpg" alt="sleeping cat" height="250">
    <div class="title m-b-md">
        <h1> Sleep Diary </h1>
    </div>
    <div>
        <h3>{{Auth::user()->name }}</h3>
    </div>
    <div>
        @if (count(App\DiaryEntry::select('*')->where('client', Auth::user()->name) > 0))
            <p>
                <a class="btn btn-primary"> View / edit existing sleep diary entries </a>
            </p>
        @endif
    </div>
    <div>
        <p>
            <a class="btn btn-primary" href="/diaryEntries"> Create a new sleep diary entry </a>
    </div>
</div>
@endsection

这显然是错误的,因为它会引发异常,那么我如何纠正它呢?集合的构建是否必须移到控制器中?如果是,如何调用该方法并查看其结果?或者我可以做一些我已经做过的事情,但只需要稍微调整一下语法就行了?

编辑

我模仿了Sehdev的建议,但我得到了以下错误:

代码语言:javascript
复制
$count is undefined

Make the variable optional in the blade template. Replace {{ $count }} with {{ $count ?? '' }}

以下是我的欢迎意见:

代码语言:javascript
复制
 @extends('layout');

 @section('content');
   <div class="content">
    <img class="centered" src="/images/sleeping-cat.jpg" alt="sleeping cat" height="250">
    <div class="title m-b-md">
        <h1>Sleep Diary</h1>
    </div>
    <div>
      <h3>{{ Auth::user()->name }}</h3>
    </div>
    <div>
        @if ($count) > 0)) 
        <p>
            <a class="btn btn-primary">View/edit existing sleep diary entries</a>
        </p>
        @endif
    </div>
    <div>
        <p><a class="btn btn-primary" href="/diaryEntries">Create a new sleep diary entry</a>      
    </div>
    </div>
    @endsection

这是DiaryEntryController的相关功能:

代码语言:javascript
复制
 public function countEntriesOneUser()
 {
    $count = DiaryEntry::select('*')->where('client', Auth::user()->name)->count();
     view("welcome", compact("count"));
    }

压缩函数应该返回$count而不是count吗?我在手册中找不到带有搜索函数的紧凑函数,所以我不清楚它是做什么的,也不清楚正确的语法是什么。我刚刚尝试将函数的最后一行更改为

代码语言:javascript
复制
view("welcome", $count);

但这也产生了同样的错误。

EN

回答 2

Stack Overflow用户

发布于 2020-02-18 05:16:57

尝尝这个,

代码语言:javascript
复制
@php
$count=\App\DiaryEntry::where('client', Auth::user()->name)->count();
@endphp
@if($count>1)
 <p><a class="btn btn-primary">View/edit existing sleep diary entries</a></p>
@endif
票数 0
EN

Stack Overflow用户

发布于 2020-02-18 05:23:11

直接在刀片模板上使用App\DiaryEntry::select('*')->where('client', Auth::user()->name)是一种糟糕的做法。

可以在控制器方法中执行问题,然后将结果传递到视图文件中。

您的功能

代码语言:javascript
复制
function test(){

    $count = DiaryEntry::select('*')->where('client', Auth::user()->name)->count();  // get the total no of records using count
    view("index", compact("count")) // pass your count variable here

}

然后,您可以在$count条件下直接使用@if

你的刀片模板

代码语言:javascript
复制
<div>
    @if ($count > 0)
    <p><a class="btn btn-primary">View/edit existing sleep diary entries</a></p>
    @endif
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60273948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档