2017-10-28 125 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

相关问题