我正在开发使用Angular-7作为前端和Laravel-5.8的应用程序。我正在使用Laravel Spatie进行用户管理。我有这三个表:
表
CREATE TABLE `client` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`client_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`client_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `trips` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`dispatch_datetime` datetime DEFAULT NULL,
`loading_date` date DEFAULT NULL,
`loaded_from` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`destination` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`client_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `users` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`client_id` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
从上面的表格中,我有三个类:User,Client和Trip。我使用Laravel Spatie使用户只能访问他们被授予权限的数据。这很正常。
现在,我想通过ApiController实现以下目标:
已登录用户应该只能查看其客户进行的旅行。
如果登录用户属于具有client_id为MBB的客户端,则他应该能够查看数据库中所有客户端的所有行程,除非他没有查看行程的权限。
public function index(Request $request){
$user = Auth::user();
$userClientId = Auth::user()->client_id;
if(!Auth::user()->hasPermissionTo('View Trip')){
return response()->json([ "message" => 'User do not have permission'], 401);
}
try{
if(Auth::user()->client_id == 'MBB')
{
if(($request->get('sort')!='null' && $request->get('sort')!='') && $request->get('search')){
$trip = Trip::where("trip_number", "LIKE", "%{$request->get('search')}%")->orderby($request->get('sort'), $request->get('order'))->paginate(10);
} else if(($request->get('sort')!='null' && $request->get('sort')!='')){
$trip = Trip::orderby($request->get('sort'), $request->get('order'))->paginate(10);
}
else if($request->get('search'))
$trip = Trip::where("trip_number", "LIKE", "%{$request->get('search')}%")->paginate(10);
else
$trip = Trip::paginate(10);
}
else
{
$trip = Trip::where('client_id', $userClientId)
if(($request->get('sort')!='null' && $request->get('sort')!='') && $request->get('search')){
$trip = $trip->where("trip_number", "LIKE", "%{$request->get('search')}%")->orderby($request->get('sort'), $request->get('order'))->paginate(10);
} else if(($request->get('sort')!='null' && $request->get('sort')!='')){
$trip = $trip->orderby($request->get('sort'), $request->get('order'))->paginate(10);
} else if($request->get('search')) {
$trip = $trip->where("trip_number", "LIKE", "%{$request->get('search')}%")->paginate(10);
} else{
$trip = $trip->paginate(10);
}
}
return response()->json($trip, 200);
}
catch(QueryException $e)
{
$errorCode = $e->errorInfo[1];
return response()->json($errorCode);
}
}
加载页面时,出现此错误:
语法错误,意外的'if'(T_IF)
然后,当我单击控制台中的错误时,将我带到Laravel的此页面:
因此,我观察到错误是由于else语句(图中的第56行,我用黄色突出显示)造成的,其中client_id不是MBB。我看了一下声明,没有发现任何错误。 如何解决此错误?
答案 0 :(得分:2)
您在第55行忘记了分号。在大多数情况下,意外错误是指语法错误
$trip = Trip::where('client_id', $userClientId);
^^