在应用带有动态路由参数的基本子句时,我在
CrudController
中遇到了一个奇怪的问题。我有一个这样的自定义路线:
Route::crud('box/{receive_order_id}/list', 'BoxCrudController');
这个想法是从 URL 中捕获
receive_order_id
参数并在查询上应用基本子句。但是,虽然 URL 参数已正确传递并且可以记录,但在应用于查询时它不起作用。对值进行硬编码效果很好。
这是带有一些上下文内嵌注释的代码:
protected function setupListOperation()
{
// Get the receive_order_id from the route
$receiveOrderId = request('receive_order_id');
// Debugging shows the value is passed correctly
// dd($receiveOrderId); // outputs "24"
// dd(gettype($receiveOrderId), $receiveOrderId === "24"); // Outputs: string, true
// Hardcoded value works perfectly
// $this->crud->addBaseClause('where', 'receive_order_id', "24" ); // works fine
// Checking the SQL generated by the query
// dd($this->crud->query->toSql()); // Outputs: "select * from `boxes` where `receive_order_id` = ?"
// dd($this->crud->query->getBindings()); // Outputs: [0 => "24"]
// Applying the URL parameter dynamically doesn't work (no results returned)
$this->crud->addBaseClause('where', 'receive_order_id', $receiveOrderId ); // no results
}
当我通过 URL 动态传递
receive_order_id
时,它不会返回任何结果,即使值和查询看起来是正确的。
关于可能导致此问题的原因有什么想法吗?
request('receive_order_id')
输出正确的值"24"
且类型为string
。"24"
配合良好。receive_order_id = ?
和正确的 "24"
绑定。您需要添加请求处理程序作为函数参数
use Illuminate\Http\Request;
public function setupListOperation(Request $request)
{
$order_d = $request->receive_order_id; // 'receive_order_id' as per route
// some code here
}