Php 将一行从一个表复制到另一个表

Php 将一行从一个表复制到另一个表,php,laravel,laravel-5,eloquent,laravel-5.4,Php,Laravel,Laravel 5,Eloquent,Laravel 5.4,我需要一点帮助,但我找不到答案。我想将一行从一个数据表复制到另一个数据表。我的代码是: 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 = Orde

我需要一点帮助,但我找不到答案。我想将一行从一个数据表复制到另一个数据表。我的代码是:

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');
}
我犯了一个错误:

“缺少关于 App\Http\Controllers\OrdersController::getClone()

。 我有两种型号:
Post
Order
。试着四处走走,写下这样的话:

public function getClone(Post $id) {
...
}
我又犯了一个错误

方法复制不存在


我的错在哪里?我做错了什么?也许我应该使用另一个函数?我是否需要用于json_解码的任何其他文件或代码片段?

首先,确保您的控制器获得$id参数-您可以在此处阅读有关路由如何在Laravel中工作的更多信息:

然后,调用包含ID的URL,例如:

localhost:8000/getClone/5
如果要基于Post对象创建Order对象,以下代码将完成此操作:

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');

}

首先,确保您的控制器获得$id参数-您可以在此处阅读有关Laravel中路由工作原理的更多信息:

然后,调用包含ID的URL,例如:

localhost:8000/getClone/5
如果要基于Post对象创建Order对象,以下代码将完成此操作:

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');
}通过书写

public function getClone(Post $id) 
您告诉脚本此函数需要来自类Post的变量$id,因此您可以像这样重写此代码:

public function getClone(){
  $id = new Post;
}
localhost:8000/getClone/5
但是,在您的情况下,这没有任何意义,因为您需要和integer,从中可以找到所需的模型。 为了使事情正确,您应该查看路由,因为执行此函数的url不正确,例如,如果您定义了如下路由:

Route::get('getClone/{id}','YourController@getClone');
那么您要查找的Url如下所示:

public function getClone(){
  $id = new Post;
}
localhost:8000/getClone/5
因此,“5”是帖子的实际ID,如果它正确,那么post::find($ID)将返回帖子,您将能够复制它,如果不正确,它将返回null,您将无法执行此操作

$item = Post::find($id);
if(!$item){
  abort(404)
}
使用此选项将导致404页面未找到错误,这意味着ID不正确。

public function getClone(Post $id) 
您告诉脚本此函数需要来自类Post的变量$id,因此您可以像这样重写此代码:

public function getClone(){
  $id = new Post;
}
localhost:8000/getClone/5
但是,在您的情况下,这没有任何意义,因为您需要和integer,从中可以找到所需的模型。 为了使事情正确,您应该查看路由,因为执行此函数的url不正确,例如,如果您定义了如下路由:

Route::get('getClone/{id}','YourController@getClone');
那么您要查找的Url如下所示:

public function getClone(){
  $id = new Post;
}
localhost:8000/getClone/5
因此,“5”是帖子的实际ID,如果它正确,那么post::find($ID)将返回帖子,您将能够复制它,如果不正确,它将返回null,您将无法执行此操作

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

使用此选项将导致404页面未找到错误,这意味着ID不正确。

您到底想做什么还不清楚<代码>缺少参数1意味着您没有将ID传递给
getClone()
方法。实际上我有两个表:“posts”(方法“Post”)和“orders”(方法“Order”)。它们都有相同的字段。“Posts”表有很多行。除了CRUD按钮外,还有一个按钮-“订单”。当我按下此按钮时,我希望将此记录复制到“Orders”表中,因此,我的路由是:route::post('/Orders','OrdersController@getClone'); 因为我想在按下localhost:8000/postsIt中的“Order”按钮后显示localhost:8000/orders,这有点不清楚您到底想做什么<代码>缺少参数1意味着您没有将ID传递给
getClone()
方法。实际上我有两个表:“posts”(方法“Post”)和“orders”(方法“Order”)。它们都有相同的字段。“Posts”表有很多行。除了CRUD按钮外,还有一个按钮-“订单”。当我按下此按钮时,我希望将此记录复制到“Orders”表中,因此,我的路由是:route::post('/Orders','OrdersController@getClone'); 因为我想在按下localhost:8000/posts中的“Order”按钮后显示localhost:8000/orders在这种情况下,getClone()的参数仍然丢失错误:(只需像getClone()方法中的另一个答案和我的答案一样修复路由。您不需要复制()方法这种方式-它应该用于获取同一模型的副本,而不是另一个。您仍然缺少路由中的$id参数,我已更新了答案。我已删除了从数据库获取订单的一行,因为您没有在控制器中的任何位置使用此变量。非常感谢您为我指出正确的方法。不w我得到了我真正需要的东西…稍加更正–我将“Route::get…”改为“Route::post…”,因为“get”导致RouteCollection.php(第251行)中的MethodNotAllowedHttpException错误。再次感谢您抽出时间(:好的,不知道您正在使用post,方法名称令人困惑:)请您将问题标记为已回答好吗?在这种情况下,getClone()的参数仍然丢失错误:(只需像其他答案和我在getClone()方法中的答案一样修复路由。您不需要复制()方法这种方式-它应该用于获取同一模型的副本,而不是另一个。您仍然缺少路由中的$id参数,我已更新了答案。我已删除了从数据库获取订单的一行,因为您没有在控制器中的任何位置使用此变量。非常感谢您为我指出正确的方法。不w我得到了我真正需要的东西…只需稍加更正–我将“Route::get…”更改为“Route::post…”,因为使用“get”我在RouteCollection.php(第251行)错误中获得了MethodNotAllowedHttpException