2017-10-28 207 views
0

我需要一點幫助,我找不到答案。我想從一個數據表複製一行到另一個。我的代碼是:從一張表複製一行到另一張

public function getClone($id) { 
$item = Post::find($id); 
$clone = $item->replicate(); 
unset($clone['name'],$clone['price']); 
$data = json_decode($clone, true); 
Order::create($data); 

$orders = Order::orderBy('price', 'asc')->paginate(5); 
return redirect ('/orders')->with('success', 'Success'); 
} 

,我得到了一個錯誤:

「缺少參數1 應用程序\ HTTP \控制器\ OrdersController :: getClone()」

。我有兩個型號:PostOrder。試圖走動,寫這樣的事情後:

public function getClone(Post $id) { 
... 
} 

我得到了另一個錯誤

方法重複不存在。

我的錯誤在哪裏?我做了什麼錯事?也許我應該使用另一個功能?我是否需要用於json_decode的任何其他文件或代碼片段?

+0

這是有點不清楚你到底想要做什麼。 '缺少參數1'意味着你沒有將ID傳遞給'getClone()'方法。 – mrHooty

+0

其實我有兩個表:「職位」(方法「職位」)和「訂單」(方法「訂單」)。他們都有相同的領域。 「帖子」表有很多行。除了CRUD按鈕,還有一個按鈕 - 「訂購」。當我按下這個按鈕時,我想把這個記錄複製到「訂單」表中,所以,我的路線是:Route :: post('/ orders','OrdersController @ getClone');因爲我想localhost:8000 /訂單按下後顯示本地主機:8000 /帖子 – JohnKet

回答

0

首先,確保你的控制器得到$ ID參數 - 你可以瞭解如何路由作品Laravel這裏閱讀更多:https://laravel.com/docs/5.4/routing

Route::get('getClone/{id}','[email protected]'); 

然後,調用包含該ID的網址,例如:

localhost:8000/getClone/5 

如果你想基於對象上創建一個訂單對象,下面的C ODE將這樣的伎倆:

public function getClone($id) { 
    // find post with given ID 
    $post = Post::findOrFail($id); 
    // get all Post attributes 
    $data = $post->attributesToArray(); 
    // remove name and price attributes 
    $data = array_except($data, ['name', 'price']); 
    // create new Order based on Post's data 
    $order = Order::create($data); 

    return redirect ('/orders')->with('success', 'Success'); 

}

+0

在這種情況下,我仍然失去getClone():( – JohnKet

+0

錯誤的參數錯誤:只需修復其他路由答案和我在getClone()方法中的答案,你不需要這種方法的replicate()方法 - 它應該用來獲得相同模型的副本,而不是另一個。 –

+0

你仍然缺少$ id參數從路由中,我已經更新了答案,我已經刪除了一行從數據庫獲取命令的行,因爲您在控制器中的任何地方都沒有使用此變量 –

0

通過編寫

public function getClone(Post $id) 

你告訴這個功能需要從後級的變量$ ID的腳本,所以你可以重寫這段代碼像這樣:

public function getClone(){ 
    $id = new Post; 
} 

但是,在你的情況下,這沒有任何意義,因爲y ou需要和整數,從中可以找到所需的模型。 爲了使事情是正確的,你應該看看你的路線,因爲執行此功能的網址是不正確的,例如,如果你定義了這樣的路線:

Route::get('getClone/{id}','[email protected]'); 

,那麼你正在尋找的網址是這樣的:

localhost:8000/getClone/5 

使「5」是該職位的實際ID,如果它的正確的,那麼郵政::發現($ ID)將返回後,你將能夠複製它,如果不是,它將返回null,你將無法這樣做。

$item = Post::find($id); 
if(!$item){ 
    abort(404) 
} 

使用這會讓一個404頁未找到錯誤,這意味着該ID不正確。

+0

你的代碼一個人工作完美,謝謝,但在嘗試複製後,我得到了關於方法複製不存在的相同錯誤。其實我有兩個表:「職位」(方法「職位」)和「訂單」(方法「訂單」)。他們都有相同的領域。 「帖子」表有很多行。除了CRUD按鈕,還有一個按鈕 - 「訂購」。當我按下這個按鈕時,我想把這個記錄複製到「訂單」表中,所以,我的路線是:Route :: post('/ orders','OrdersController @ getClone');因爲我想要在localhost:8000/posts中按下「Order」按鈕之後顯示localhost:8000/orders – JohnKet

相關問題