2016-03-22 3 views
0

Es scheint einige massive Änderungen in Laravel 5.2 gegeben zu haben. Die Lösungen für ältere Versionen scheinen nicht zu funktionieren. Idealerweise sollten die Werte für token, created_at und updated_at automatisch bei jedem Einfügebefehl aus sein. Wie soll das gemacht werden? Wenn der aktuelle Code ausgeführt wird, wird in diesen drei Spalten kein Wert eingefügt. Hier ist der Code in Controller:Laravel 5.2 Geben Sie Token- und created_at-Werte in die Datenbank ein

public function showCustomer(Request $request){ 
    $nameCheck = DB::table('customers')->select("customer_name")->where("customer_name",$request->name)->get(); 
    $response = array(); 
    if(count($nameCheck) > 0){ 
     $response["success"]="0"; 
    } else { 
     $data = array(
      "customer_name" => $request->name, 
      "age" => $request->age, 
      ); 

     if(DB::table('customers')->insert($data)){ 
      $response["success"]="1"; 
     } else { 
      $response["success"]="-1"; 
     } 
    } 
    echo json_encode($response); 
} 

Dies ist der Code für das Modell

namespace App; 
use Illuminate\Database\Eloquent\Model; 

class Customers extends Model{ 

} 

-Code für das Formular

<div class="customer-form"> 

{!! Form::open(array('url'=>"customer")) !!} 
{!! Form::label("Customer Name: ") !!} 
{!! Form::text('name', null, array('class'=>'form-control','placeholder'=>"Your name")) !!} 
{!! Form::label("Age: ") !!} 
{!! Form::number('age', null, array('class'=>'form-control','placeholder'=>"Age")) !!} 
{!! Form::submit('submit', array('class'=>'form-control')) !!} 
{!! Form::close() !!} 

</div> 

Hier ist der Code für die Tabelle erstellen:

public function up() 
{ 
    Schema::create('customers', function (Blueprint $table) { 
     $table->increments('customer_id'); 
     $table->string('customer_name'); 
     $table->integer('age'); 
     $table->timestamps(); 
     $table->rememberToken(); 
    }); 
} 

Antwort

0

Sie haben nicht speziell danach gefragt, aber ich habe Ihre showCustomer Methode umgeschrieben, um Ihnen ein bisschen sauberer Code zu zeigen, und wie man es so "Laravel" macht.

public function showCustomer(Request $request){ 
    $customer = Customer::select("customer_name") 
     ->where("customer_name",$request->name) 
     ->first(); 

    if($customer){ 
     return response()->json(['success' => 0]); 
    } 

    $customer = new Customer; 
    $customer->name = $request->name; 
    $customer->age = $request->age; 
    $customer->token = str_random(50); 

    if ($customer->save()) { 
     return response()->json(['success' => 1]); 
    } 

    return response()->json(['success' => -1]); 
} 

Hier sind ein paar Dinge zu beachten: nicht gesetzt ist automatisch ohne eine zusätzliche Konfiguration

  1. Das Token erinnern. Sie können spezielle Methoden verwenden, um es zu aktualisieren, wenn Sie es speichern, aber ich habe es einfach gefunden, es selbst zu setzen, indem Sie str_random() wie oben gezeigt verwenden.

  2. Modelle sollten die Singularform des Wortes sein, also sollten Sie Ihr Modell von Customers zu Customer ändern. Zusätzlich Primärschlüssel sollte einfach id sein statt customer_id

  3. Um die created_at zu bekommen und updated_at Zeitstempel, zu arbeiten, werden Sie wahrscheinlich brauchen, um sie durch das Modell (wie in dem modifizierten showCustomer Verfahren oben) statt verweisen von bis DB::table().

+0

danke für die Reinigung des Codes zusammen mit der Beantwortung. – suku

1

Wenn Sie einfügen/up Datum Daten mit DB Fassade direkt keine zusätzliche Update/Einfügelogik angewendet wird - nur was Sie sagen Datenbankebene zu tun ist tatsächlich getan. In Ihrem Fall fügen Sie nur eine Zeile mit den angegebenen Werten customer_name und age ein.

Um Laravel Modell-internen Zeitstempel-Funktionalität nutzen zu können, DB insert/update Interaktionen wie diese durchführen müssen:

$newCustomer = new Customers($request->all()); 
$newCustomer->save(); 

Sie werden auch Massen belegbare Felder in Modell angeben müssen in der Lage sein geben sie im Batch (Konstruktorparameter in meinem Beispiel) für das Speichern:

class Customers extends Model { 
    protected $primaryKey = 'customer_id'; 

    protected $fillable = [ 
     "customer_name", "age" 
    ]; 
} 

Wenn Sie Ihre Tabelle Primärschlüssel andere als ‚id‘ nennen müssen Sie auch im Modell angeben, wie ich oben tat.

+0

danke für die Vorschläge und die Antwort. Ich habe sie eingebaut – suku