Ich versuche an meiner Laravel-Site eine Theke zu bauen. Dieser Zähler nimmt alle Kommentare vom Modell auf Bemerkungen welche von Carbon :: now () bis startofMonth () erstellt wurden. Also ich habe meinen Controller und Funktionszähler so:
class CommentsController extends Controller
{
public function counter()
{
$new_comments=Comments::where("created_at", Carbon::now()->startofMonth())->get();
$counted->count($new_comments["created_at"]);
return View::make("pages.dashboard")->with("new_comments", $counted);
}
}
Meine Klingenvorlage:
<div class="row">
<div class="col-xs-3">
<i class="fa fa-comments fa-5x"></i>
</div>
<div class="col-xs-9 text-right">
<div class="huge">{{!!$new_comments!!}}</div>
<div>New Comments!</div>
</div>
Ich erhalte ständig eine undefinierte Fehlermeldung, obwohl die Variable im Controller aufgerufen wird! Die Dashboard-Seite funktioniert gut, wenn die Variable nicht in der Blade-Vorlage aufgerufen wird.
BEARBEITEN:
Es ist mir gelungen, dies zu erreichen, wenn der Controller ignoriert wird und Folgendes in meine Ansicht eingefügt wird:
{{AppComments::count()}}
Dies zeigt nur die Gesamtzahl der Zeilen in der Tabelle Kommentare, aber ich werde versuchen, die MySQL-Abfrage hinzuzufügen.
Ich weiß immer noch nicht, warum es vom Controller nicht als Variable aufgerufen werden kann.
Antworten:
0 für die Antwort № 1In Ihrer Blade-Vorlage rufen Sie es aber richtig auf! bringt solche Probleme {{!!$new_comments!!}}
es wird Variable undefined sagen.
Versuchen Sie es ohne !!, es hat für mich funktioniert.
0 für die Antwort № 2
Erstens: Sie möchten, dass alle Kommentare von Anfang des Monats bis jetzt erstellt werden. Sie benötigen eine whereBetween-Abfrage, die nicht gleich ist.
Zweitens: Sie rufen eine undefinierte Variable $ counted auf. Ich denke du musst entfernen
$counted->count($new_comments["created_at"]);
und übergeben Sie $ new_comments an View statt $ counted
return View::make("pages.dashboard")->with("new_comments", $new_comments);
und Anzeige der Kommentare in der Ansicht
{{ $new_comments->count() }}
Hoffe das hilft dir
0 für die Antwort № 3
Dies ist eine etwas verspätete Antwort, aber ich glaube, Sie übergeben Ihre Variablen falsch mit der ->with()
Funktion. Aus meiner Erfahrung mit Laravel ->with()
verwendet eine Array-Syntax, um mehrere Variablen an eine Ansicht zu übergeben. Zum Beispiel:
return View::make("pages.dashboard")
->with(["new_comments" => $new_comments, "counted" => $counted]);
// Note the array usage, works with [] or array()
Dann in deinem dashboard.blade.php
Sie können entweder anrufen {{ $new_comments }}
oder {!! $new_comments !!}
um diesen Wert auszudrücken (man ignoriert HTML-Markup, man schließt ihn ein.)
Nebenbei bemerkt, der Versuch, den Inhalt einer Eloquent-Sammlung auszusprechen Comment::get()
im Gegensatz zu so etwas Comment::first()
) funktioniert möglicherweise nicht. Sie sollten die Ergebnisse durchlaufen und entsprechend wiederholen:
@foreach($new_comments AS $new_comment)
{!! $new_comment->created_at !!}
...
@endforeach
0 für die Antwort № 4
Dies wurde gelöst. Ich habe die Rückkehransicht :: Make (Dashboard) in einem anderen (Seite) Controller aufgerufen. Dieser Controller hatte Präzedenzfall, daher trat diese Ansicht nicht auf. Deshalb habe ich in meinem Pagecontroller Folgendes angewendet:
public function dashboard()
{
$count = Comments::where("created_at", ">", Carbon::today())->count();
return View::make("pages.dashboard")->with("new_comments_count", $count);
}
Ich kann dann new_comments_count in meiner Ansicht aufrufen. Vielen Dank für die Hilfe.