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