You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel路由中使用预订号而非ID,并结合企业ID查询数据?

解决Laravel路由中多条件匹配预订记录的问题

要实现通过预订号+企业ID匹配预订记录的路由,默认的隐式路由模型绑定仅支持单字段匹配,因此需要调整实现方式,以下是两种可行方案:

方案一:手动查询(简单直接)

直接在路由闭包中执行多条件查询,保持和隐式绑定一致的firstOrFail行为(未找到记录时自动抛出404):

Route::get('/bookings/{number}', function($number){
    $booking = Booking::where('number', $number)
        ->where('company_id', Helpers::companyInfo()->id)
        ->firstOrFail();
        
    return view('bookingsView', ['booking' => $booking]);
})->name('booking.view');

方案二:自定义路由模型绑定(复用性高)

如果多个路由都需要相同的多条件匹配逻辑,可以在RouteServiceProvider中注册自定义绑定规则:

  1. 在app/Providers/RouteServiceProvider.php的boot方法中添加绑定逻辑:
use App\Models\Booking;
use Illuminate\Support\Facades\Route;

public function boot()
{
    parent::boot();

    // 注册自定义绑定,匹配预订号+企业ID
    Route::bind('bookingByNumber', function ($number) {
        return Booking::where('number', $number)
            ->where('company_id', Helpers::companyInfo()->id)
            ->firstOrFail();
    });
}
  1. 修改路由,使用自定义的绑定参数:
Route::get('/bookings/{bookingByNumber}', function(Booking $booking){
    return view('bookingsView', ['booking' => $booking]);
})->name('booking.view');

注意事项

  • 确保Helpers::companyInfo()->id能稳定获取当前请求对应的企业ID,避免因返回null导致查询失败;
  • 若需要自定义未找到记录的处理逻辑,可将firstOrFail替换为first,随后自行判断并返回404视图或提示信息。

内容的提问来源于stack exchange,提问作者Will Perkins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:22:13