我想验证用户是否与请求验证中的订单相关联。
订单迁移:
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id')->nullable();
...
$table->timestamps();
$table->softDeletes();
用户表:
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
我已经手动创建了一个函数来检查订单是否与用户相关联
public function checkIfOrderIsAssociatedWithTheUser(Request $request){
$checkExistsStatus = Order::where('id',$request->order_id)->where('user_id', $request->user_id)->exists();
return $checkExistsStatus;
}
当我需要检查合作伙伴时,我必须像下面这样调用该函数:
$this->validate($request, [
'order_id' => 'required|exists:orders,id',
'user_id' => 'required|exists:users,id'
]);
$checkExistsStatus = $this->checkIfOrderIsAssociatedWithTheUser($request);
if(!$checkExistsStatus){
return redirect()->back()->withErrors([
'Order and user is not linked'
]);
}else{
...
}
我试图创建一个新规则: CheckAssociationBetweenOrderAndUser ,但是我无法将user_id传递给它。
$this->validate($request, [
//unable to pass user_id
'order_id' => ['required', new CheckAssociationBetweenOrderAndUser()]
]);
是否有更好的方法通过创建自定义新规则来验证关联检查?还是这是检查关联的唯一方法?
答案 0 :(得分:3)
创建自定义规则是一个很好的尝试。您可以在构造器中将$request
作为参数传递,例如
$this->validate($request, [
'field' => ['required', new CustomRule ($request)]
]);
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Http\Request;
class CustomRule implements Rule
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
...
}