Laravel : Call to undefined method Illuminate\Database\Eloquent\Collection::save()
Ich bin im Grunde versucht, um eine bestimmte Zeile aus meiner Tabelle und aktualisieren Sie es, aber ich am Ende immer eine Sammlung für die save-Methode ist nicht definiert, wie die Fehlermeldung sagt, in meinem Titel. Können Sie mir bitte sagen, was falsch ist im code unten. Ich habe auch versucht es ohne die get-Methode. Aber in diesem Fall bekomme ich eine andere Fehlermeldung. Auch, bitte lassen Sie mich wissen, ob es eine bessere Vorgehensweise zum abrufen einer Zeile aus einer Tabelle mit zwei Primärschlüsseln(userId", folderName) in diesem Fall. Danke 🙂
$tempFolder = Message_Folders::where('userId',"=",1)->where('folderName',"=",$imap_folder['name'])->get();
if($tempFolder==null){//If not existing, however in this example assume that it exists
$tempFolder = new Message_Folders();
$tempFolder->userId = 1;
$tempFolder->folderName = $imap_folder['name'];
}
$tempFolder->flags = $imap_folder['status']->flags;
$tempFolder->messages = $imap_folder['status']->messages;
$tempFolder->recent = $imap_folder['status']->recent;
$tempFolder->unseen = $imap_folder['status']->unseen;
$tempFolder->uidnext = $imap_folder['status']->uidnext;
$tempFolder->uidvalidity = $imap_folder['status']->uidvalidity;
$tempFolder->save();
Edit 1:
Nach Aktualisierung den code wie erwähnt in der ersten Antwort, jetzt bekomme ich einen neuen Fehler.
SQLSTATE[42S22]: Column nicht found: 1054 Unknown column 'id' in 'where-Klausel' (SQL: update message_folders
set recent
= 4, updated_at
= 2014-03-08 13:34:10 wo id
ist null)
Entnehmen Sie bitte den folgenden code:( Auch, wenn alle Werte gleich sind, dann funktioniert es einwandfrei(seit dem update ist eigentlich nicht passiert))
$tempFolder = $this->folders->where('userId',"=",1)->where('folderName',"=",$imap_folder['name'])->first();
if($tempFolder==null){
$tempFolder = new Message_Folders();
$tempFolder->userId = 1;
$tempFolder->folderName = $imap_folder['name'];
}
$tempFolder->flags = $imap_folder['status']->flags;
$tempFolder->messages = $imap_folder['status']->messages;
$tempFolder->recent = 4;
$tempFolder->unseen = $imap_folder['status']->unseen;
$tempFolder->uidnext = $imap_folder['status']->uidnext;
$tempFolder->uidvalidity = $imap_folder['status']->uidvalidity;
$tempFolder->save();
Edit 2: Teil der migration-Datei für die Tabelle in der oben aufgeführten code:
public function up()
{
Schema::create('message_folders', function(Blueprint $table) {
$table->integer('userId');
$table->string('folderName', 200);
$table->integer('flags');
$table->integer('messages');
$table->integer('recent');
$table->integer('unseen');
$table->integer('uidnext');
$table->integer('uidvalidity');
$table->timestamps();
$table->primary(array('userId','folderName'));
});
}
InformationsquelleAutor Chintan Parekh | 2014-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die folgende Zeile verwendet die bekommen - Methode der Abfrage-generator:
Wird es abrufen von alle Zeilen von diesem Modell (gefiltert durch wo Zustand natürlich). So erhalten Sie eine Auflistung anstelle einer Instanz des Modells.
Abrufen einer einzelnen Zeile aus der Abfrage, die Sie verwenden können ersten Methode:
Also, im Grunde, ich habe es gerade ausprobiert mit deinem Vorschlag und jetzt bin ich immer ein neuer Fehler. Bitte überprüfen Sie die aktualisierte code. Ich denke, es wird versuchen zu finden, eine Spalte mit dem Namen id (und ich weiß nicht warum, da ich keine Spalte mit dem Namen id)
Ja, wenn Sie wollen nur eine einzelne Zeile dann mit erste. Wenn Sie Zugriff auf eine dynamische Eigenschaft, dann Laravel weiß, ob es zum aufrufen der get-Methode (one-to-many Beziehungen) oder der ersten Methode (one-to-one-Beziehungen).
Überprüfen Sie die Modell-oder Datenbank-migration, es sollte eine id-Spalte irgendwo.
Gut, vielen Dank, für die obige Antwort. Das habe ich schon prüfen. Es gibt keine Id-Spalte. Wollen Sie mir den code für meine migration auch?
InformationsquelleAutor marcanuy