2017-11-15 4 views
0

Ich habe eine einfache Controller-Funktion, die alle Datensätze aus db abrufen. aber wenn ich versuche, alle diese Aufzeichnungen zu zeigen, zeigt es nichts. Tatsächlich zeigt es mir eine hart codierte foreach-Schleife wie diese.Daten in Ansicht in Laravel laden

@foreach ($compactData as $value) {{ $value->Name }} @endforeach 

Das ist meine Steuerfunktion.

public function showallProducts() 
{ 
    $productstock = Product::all()->stocks; 
    $productoldprice = Product::all()->OldPrices; 
    $productcurrentprice = Product::all()->CurrentPrice; 
    $compactData=array('productstock', 'productoldprice', 'productcurrentprice'); 
    return view('welcome', compact($compactData)); 
} 

das ist meine Ansicht

 <!doctype html> 
<html lang="{{ app()->getLocale() }}"> 
<head> 


</head> 
<body> 
    <div class="flex-center position-ref full-height"> 

     <div class="content"> 
      <div class="title m-b-md"> 
       Laravel 
      </div> 

      <div class="title m-b-md"> 
       All products 
      </div> 


      <table> 

       <tbody> 
       @foreach ($compactData as $value) 
        {{ $value->Name }} 

       @endforeach 

       </tbody> 


      </table> 
     </div> 
    </div> 
</body> 

warum es so verhält. irgendeine Lösungsmöglichkeit?? Ich benutze phpstorm Version 17. Ist ihr Einstellungs-Problem, um Projekt zu laufen, was auch immer Projekt, das ich lief, gibt es mir die einzige Seite, die ich mit nur html lief? Meine Route ist.

Route::get('/', function() { 

    $action = 'showallProducts'; 
    return App::make('ProductController')->$action(); 
}); 
+0

Zeigt es tatsächlich die @ @foreach ($ compactData als $ wert) {{$ wert-> Name}} @ endforeach in der Browser-Quelle? – aynber

+0

Ja, es druckt die @ foreach-Schleife in der Browser-Quelle. wenn ich versuche mein porject – raja

+0

dann laufen Sie es nicht richtig. Sie müssen Ihr Laravel-Projekt auf einem Webserver ausführen. Wenn Sie nicht bereits einen vor Ort haben, ist Laravels Homestead VM eine großartige Lösung. Wenn Sie es bereits mit einem Webserver ausführen, müssen Sie die Konfiguration des Servers überprüfen, um herauszufinden, warum der PHP-Code nicht analysiert wird. – aynber

Antwort

0

Sie haben wahrscheinlich ein Problem mit Ihrem Webserver.

Versuchen Sie Laravel Valet als Entwicklungsumgebung zu verwenden.

bearbeiten: ich dies gefunden: Valet for Windows

+0

Ist es für Windows? – raja

+0

Ich glaube leider nicht: / –

0

Ich glaube, Sie nicht die blade im Namen der View-Datei nicht erwähnt, durch die sie gespeichert wird. Ändern Sie den Namen der Datei, in der er gespeichert wird, in einen der folgenden Werte:

filename.blade.php 

und versuchen Sie es erneut.

Erläuterung:

@foreach ($compactData as $value) dies ist die Syntax von Blade-Template-Engine und zu analysieren und excute es, müssen Sie die blade Erweiterung im Namen nennen.

+0

Nein, es funktioniert nicht. Ich denke, es ist ein Problem mit php strom Einstellung – raja

+0

Sie müssen nicht den vollständigen Dateinamen in Laravel verwenden. Es sucht automatisch nach der '.blade.php'. – aynber

+1

Ich sage, um die Datei mit 'blade' zu ​​speichern –

0

Haben Sie überprüft Ihre $compactData Variable? Bitte dd($compactData), um zu sehen, was es enthält.

Problem 1

Sie sind eine relationale Eigenschaft als Eigenschaft von Eloquent Sammlung, wie dieser Zugriff:

Product::all()->stocks

, die nicht korrekt ist. Weil das Collection-Objekt nicht über die Eigenschaft stocks verfügt, aber das Objekt möglicherweise eine Eigenschaft "stocks" aufweist. Bitte lesen Sie die Laravel Dokumentation über die Sammlung.

Problem 2

$compactData = array('productstock', 'productoldprice', 'productcurrentprice');

Diese Zeile eine Anordnung von 4 string, Zeichenkette Klar nicht variabel zu schaffen. So enthält Ihr $compactData ein Array von 4 Strings.Wenn Sie eine Variable mit assoziativem Array haben wollen, dann müssen Sie folgendes tun:

$compactData = compact('productstock', 'productoldprice', 'productcurrentprice');

Problem 3

return view('welcome', compact($compactData)); 

Hier können Sie versuchen, die $compactDate auf die welcome Ansicht passieren aber leider compact() Funktion akzeptiert keine Variable, sondern den String-Namen der Variablen, wie ich in Problem 2 geschrieben habe. So soll es sein:

return view('welcome', compact('compactData')); 

Problem 4

schließlich in der Klinge sind Sie jedes Element der $compactData Datenvariable zugreifen und sie als Zeichenfolge drucken, die ein Objekt sein könnte.