我基本上是想从我的表中获取特定行并更新它,但是我最终得到的是一个集合,其中保存方法未定义,正如我的标题中所说的错误。您能告诉我以下代码有什么问题吗?我也尝试过不使用get方法。但在这种情况下,我会得到不同的错误。此外,请让我知道如果有更好的方法来检索具有两个主键(userId,folderName)的表中的行。谢谢 :)
$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();
编辑1:
按照第一个答案中提到的更新代码后,现在我得到了一个新的错误。
SQLSTATE [42S22]:Column not found: 1054 在'where clause'中未知的列'id'(SQL:update message_folders
set recent
= 4,updated_at
=2014-03-08 13:34:10 where id
is null)
请参考以下代码:(此外,如果所有值都相同,则可以正常工作(因为实际上没有进行更新))
$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();
编辑2:上述代码中提到的表的迁移文件部分:
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'));
});
}