php unable to save,php – Laravel save()未定义
我試圖將我現有的插入方法轉換為查詢范圍,以便我可以重用它們并采用更干的方法.
這就是我想要轉換為Larvel查詢范圍的內容:
$time = new Time;
$time->employee_id = $input['user_id'];
$time->day = Carbon::now()->toDateString();
$time->clock_in = Carbon::now()->toTimeString();
$time->save();
這就是我現在對查詢范圍的看法:
public function scopeClockIn($query, $userID) {
$query->employee_id = $userID;
$query->day = Carbon::now()->toDateString();
$query->clock_in = Carbon::now()->toTimeString();
$query->save();
}
這就是我調用上面的查詢范圍的方法:
$time = Time::clockIn($input['user_id']);
但我得到錯誤:
Call to undefined method Illuminate\Database\Query\Builder::save()
我也嘗試過:
$time = new Time::clockIn($input['user_id']);
但是當我嘗試使用new關鍵字時出現錯誤:
語法錯誤,意外的’clockIn'(T_STRING),期望變量(T_VARIABLE)或’$’
谷歌一直沒有幫助我發現其他問題與相同的錯誤消息,但他們試圖檢索結果而不是插入它們.希望有人在這里可以幫我弄清楚我做錯了什么.
解決方法:
好的,寫得很好的問題.
Laravel使用Builder通過例如數據庫與數據庫進行交互.構造和執行SQL查詢.一旦完成,它將返回您的Time對象 – 或者它們的集合.
當你這樣做時Time :: all()或Time :: where(‘something’,’=’,’something’) – > get(),你沒有使用Time對象而是使用Builder.
范圍在“從數據庫獲取和返回內容”階段應用,這就是您從Builder收到錯誤的原因.你無法保存任何東西 – 因為你仍在構建一個查詢,你實際上并不是一個Time對象的實例.
你的想法很好,把事情變得更小,更清晰通常是一個好主意.它不應該是一個范圍.你想要做的可能是只提供用戶ID并使其成為靜態函數.像這樣的東西:
public static function createFromUserId($userID) {
$time = new static();
$time->employee_id = $userID;
$time->day = Carbon::now()->toDateString();
$time->clock_in = Carbon::now()->toTimeString();
$time->save();
return $time;
}
請注意static關鍵字,這意味著您沒有使用特定對象,而是使用類上的常規函數??.這就是為什么你在后面的問題中得到了語法錯誤::: in Time :: clockIn()表示它是一個靜態方法,但你還沒有使方法成為靜態.
我還確保該方法返回創建的時間,以防您需要對其進行操作.現在,您可以使用用戶ID創建新的Time對象,如下所示:
$time = Time::createFromUserId($userID);
我希望能回答你的問題.
標簽:php,laravel,laravel-5
來源: https://codeday.me/bug/20190608/1201245.html
總結
以上是生活随笔為你收集整理的php unable to save,php – Laravel save()未定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用matlab编程简单电子琴,基于MAT
- 下一篇: php atime,PHP Direct