在Laravel中使用资源路由

时间:2017-02-11 23:00:04

标签: php laravel

我认为这可能是一个非常简单的问题。

我为我的班级订购了一条资源路线,因为它们需要被创建,销毁,编辑,查看等等。

我的应用程序中有一个位置,我希望通过AJAX加载所有订单,这些订单目前是“杰出的”#39; (!=完成)。

我想我应该使用orders.show路线,是吗?我唯一的困惑在于它所说的访问orders.show路由的URI,你需要指定一个订单,如下所示:

为了/ {顺序}

enter image description here

如果我想使用AJAX与我的控制器交谈,以便控制器返回它从状态!=完成的数据库中获取的订单列表,我在URI中指定了什么?我不想抓一个订单,我想抓住一个订单。

来自我的控制器:

  public function show(Order $order){
    $orders = Order::where('status', '!=' , 'Received')->get();
    return $orders;
  }

非常感谢。

1 个答案:

答案 0 :(得分:2)

show方法是指您返回单个资源 - 单个订单。这就是它将订单作为路线的一部分参考的原因。

index方法是返回资源集合的方法 - 多个订单。您可以通过多种方式解决此问题:默认情况下,您可以定期返回所有订单OrdersController,但查询参数可能会根据状态进行限制,或者您可以创建特定的OutstandingOrdersController只返回那些订单。

这是一个如何以第一种方式解决问题的例子。

class OrdersController extends Controller
{
    public function index()
    {
        $orders = Order::query();

        if (request()->has('outstanding')) {
            $orders->where('status', '!=', 'Received');
        }

        return $orders->get();
    }
}

然后,您的Ajax库可以为所有订单执行GET /orders,或GET /orders?outstanding只能检索未完成的订单。您还可以考虑为查询提供status参数,以仅检索特定状态的订单。