[英]Laravel Eloquent doesn't update only inserting
我正面臨着PHP Laravel更新功能的一些問題。 它不會更新,只會插入。
public function post_rate(){
$o = Input::all();
//has user already rated?!
$query = DB::table("ratings")->select("id")->where("user", "=", Auth::user()->id)->where("story_id", "=", $o['story_id'])->get();
foreach ( $query as $d):
$theID = $d->id;
endforeach;
if ( empty($query)): //User hasn't rated!
$z = new Rating();
else:
$z = new Rating($theID); //user has rated, tell which to update
-----------------------------^ that cause the problem!
endif;
$z->story_id = $o['story_id'];
$z->user = Auth::user()->id;
$z->rating = $o['rating'];
$z->save();
echo "OK";
}
當沒有成立行時它會起作用,但是當我使用新的等級(@something)時,它會失敗。
“ratings”表中的列id是primary和auto_increment。
在我的模型中,我也設置了
public static $key = 'id';
輸出“$ theID”還包含mysql行的正確ID。
嘗試: $z = Rating::find($theID)
,而不是->first()
或->get()
$z = Rating::find($theID);
要么
$z = Rating::where('id', '=', $theID)->first();
兩者都是等價的。
要在laravel中更新,只需使用該命令即可
Rating::where('id','=',$theID)->update(array('name'=> $name));
我希望這可以提供一些幫助。
老兄!
我也遇到了同樣的問題。 檢查源代碼,我發現設置主鍵名稱的正確字段是'primarykey'。
例如:
class User extends Eloquent {
protected $table = 'users';
protected $primaryKey = 'ID';
public $timestamps = false;
}
別緊張 !
看看這個,當用戶沒有評價你只是像以前一樣保存它!
if ( empty($query)){ //User hasn't rated!
$z = new Rating();
$z->story_id = $o['story_id'];
$z->user = Auth::user()->id;
$z->rating = $o['rating'];
$z->save();
}
並在更新部分! 做如下:
else{
$rates = array(
'story_id' => $o['story_id'],
'user' => Auth::user()->id,
'rating' => $o['rating'],
);
$old = Rating::find($theID);
$old->fill($rates);
$old->save();
}
對於注冊,Eloquent沒有運行更新,因為我使用的方法(見下文)沒有將exists屬性設置為true。 這是因為我從請求中獲取了所有返回的字段($ request-> all)並創建了一個模型,但這並不能使對象更新。
這沒用
$produto = new Produto($request->all());
$produto->update();
這也行不通
$produto = new Produto($request->all());
$produtoToUpdate = Produto::find($this->id);
$produtoToUpdate->update(get_object_vars($produto));
永遠不要使用get_object_var , Eloquent Model有虛擬屬性(你得到getAttributes),所以get_object_var沒有返回你的字段。
這項工作!!
$produto = new Produto($request->all());
if ($this->id <= 0 )
{
$produto->save();
} else
{
$produto->exists = true;
$produto->id = $this->id;
$produto->update();
}
我也遇到了同樣的問題,所以事實證明這是一個雄辯的模型問題。
首先在模型中添加一個可填充的受保護數組名稱並定義屬性
protected $fillable = array('story_id', 'rating');
在您的情況下,有很多方法可以更新Laravel中的表。
1. $requestedRating = Rating::findOrFail($id)->first()->update($request->all()); // No need for first if the id is unique.
2. $requestedRating = Rating::findOrFail($id)->get()->update($request->all()); // fetch records from that model and update.
3. $requestedRating = Rating::whereIn('id', $id)->update($request->all());
代替更新,您也可以使用填充。
1. $requestedRating = Rating::findOrFail($id)->first()->fill($request->all())->save();
始終存在DB :: table方法,但僅在沒有可用選項時才使用此方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.