5

Orders_Controller在 Laravel 中有一个名为 getOrders($user) 的函数。它调用原始数据库查询并构建一个 JSON 数组以返回。

我无法弄清楚如何从我的路由文件中调用此函数。

基本上我在路由中收到一个 POST,插入新订单,然后我想从此 Routes 函数调用 getOrders(user) 以获取给定用户的所有现有订单。

有人可以帮我弄清楚如何从 Routes.php 中调用这个函数吗?

路由.php

//Handle a new order POST
Route::post('order', array('do' => function() {
    ...
    ... //HANDLE POST DATA AND INSERT NEW ORDER
    ...

    //GET ALL ORDERS FOR THIS USER FROM ORDER CONTROLLER
    $userOrders = Order_Controller::myOrders($thisUser);
}

order.php(在 Controllers 文件夹中)

class Order_Controller extends Base_Controller
{
    public function myOrders($user){
        return DB::query("SELECT ...");
    }
}
4

5 回答 5

6

正如 larauser 所建议的,您可以将 myOrders() 方法移动到模型并静态调用它。这是一个例子

class Order extends Eloquent {

    public static function myOrders($user)
    {
         // DB call here
    }
}

然后在你的路线上你可以做

Route::post('order/(:num)', function($user)
{
    $userOrders = Order::myOrders($user);

    // Do stuff here
});

我猜你正在传递用户 ID,这就是我在路由中使用 (:num) 的原因。

希望有帮助。

于 2012-12-02T22:07:21.353 回答
4

我使用了另一种方法,可能不正确,但它可能对您有用。

$userOrders = Controller::call('order@myOrders', array($thisUser))->content

有关更多信息以及如何使用它,请查看Controller 类的文档。

于 2013-01-25T12:11:29.467 回答
2

myOrders 函数可能应该进入您的订单模型,因为它使用数据访问。然后,要调用它,您需要执行 Orders::myOrders($user)。

于 2012-12-02T21:57:17.820 回答
2

更简单的方法是将控制器作为类调用

Route::post( 'post', function() use ($user) {
  return (new OrderController)->myOrders($user);
});

于 2020-04-04T18:59:16.247 回答
1

路由.php

//Handle a new order POST
Route::post('orders/(:num)', function($user) {
    ...
    ... //HANDLE POST DATA AND INSERT NEW ORDER
    ...
});

Route::get('orders', function($user) {
   //GET ALL ORDERS FOR THIS USER FROM ORDER MODEL
   $userOrders = Order::myOrders($user)->get();
});

应用程序/模型/Order.php

class Order extends Eloquent
{
    public static function myOrders($user_id)
    {
        return Order::where_user_id($user_id);
    }
}
于 2012-12-02T22:10:29.813 回答