Laravel - 如何将变量传递给WhereIn

时间:2018-01-22 20:13:55

标签: php laravel-5.3

Laravel的新手。我正在尝试使用控制器来匹配URL中发送的服务。

示例网址:

/public/service/cost/2

控制器中的代码是:

public function getServiceCost($id) {

    $service = Service::whereIn('id', array($id))->get();

    return $service;
}

我希望能够在URL中传递多个ID,如下所示: /公共/服务/成本/ 1,2,3

如果我硬编码进行测试,它可以正常工作。

public function getServiceCost($id) {
  $service = Service::whereIn('id', array(1, 2, 3))->get();
  return $service;
}  

我需要做什么才能将URL中的参数传递给whereIn,以便它返回我在URL中传递的内容?

如果我使用

/public/service/cost/2,3

它只返回id 2的数据。

我将函数更改为使用Request $ request,但它仍然只显示一个结果:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Service;

class ServiceController extends Controller
{ 
    public function getServiceCost2(Request $request) {
        $service = Service::whereIn('id', array($request->get('id')))->get();

        return $service;
    }
}

使用的网址是:

public/service/cost?id=1,2

3 个答案:

答案 0 :(得分:0)

您好@BillyB需要重新考虑网址结构,您可以使用GET参数传递多个参数。

我建议您创建服务网址:

/public/service/cost?id[]=1&id[]=2&id[]=3

控制器中的代码是:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

.....

public function getServiceCost(Request $request) {

    $service = Service::whereIn('id',$request->get('id'))->get();

    return $service;
}

https://laravel.com/docs/5.3/requests

中有详细记录

答案 1 :(得分:0)

我认为您需要更改路由方法传递给 POST ,您的表单会像这样生成名称,例如:

<input type="text" name="id[]" />

通过这种方式,您可以使用以下命令在控制器中捕获包含多个 ID 的数组:

request()->get('id');

答案 2 :(得分:-2)

尝试使用:

$arr = explode(',',$id)

他们将有一个带有ID的数组