如果查询没有返回任何内容,我会收到一些奇怪的错误。我该如何妥善处理?
错误:
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“)”附近使用正确的语法(SQL:选择
users
。uid
,first_name
,last_name
,IFNULL(files.filename,'default.jpg')AS avatar,来自privacy
users
的{{1}}user_avatars
users
uid
= {{1} } {。{1}}在user_avatars
uid
=files
。user_avatars
其中fid
files
{}离开加入fid
。users
在())
代码:
uid
更新
我尝试添加$me = User::loggedin();
$contacts = DB::table('contacts')
->where('status', 'contact')
->where('uid_by', $me)
->orWhere('uid_to', $me)
->select(
DB::raw("IF(uid_by = $me, uid_to, uid_by) AS user_id")
)
->paginate(10);
if ($contacts != null) {
$users_id = array();
foreach ($contacts as $contact) {
$users_id[] = $contact->user_id;
}
$data = DB::table('users')
->leftJoin('user_avatars', 'users.uid', '=', 'user_avatars.uid')
->leftJoin('files', 'user_avatars.fid', '=', 'files.fid')
->whereIn('users.uid', $users_id)
->select('users.uid', 'first_name', 'last_name', DB::raw('IFNULL(files.filename, \'default.jpg\') AS avatar'), 'privacy')
->get();
return Response::json(array('contacts' => $data));
}
//if no data was returned
return Response::json(array('contacts' => 0));
,但它返回了很多与laravel相关的对象。
另一方面,如果我添加?page = 1,则返回2个联系人SUCCESSFULLY 如果我添加?page = 2,那么它会给出错误。 (可能是因为没有数据)但我想妥善处理这个问题。
答案 0 :(得分:0)
if ($contacts != null) {
$users_id = array();
foreach ($contacts as $contact) {
$users_id[] = $contact->user_id;
}
您的代码部分无效。做一个var_dump($ contacts);并看看它到底是什么,因为它不能为空,看起来它只是一个空数组。
答案 1 :(得分:0)
你需要在线上加上一些逻辑
>whereIn('users.uid', $users_id)
因为你已经链接了这些电话,所以你不能简单地在那条线路上放一个if(不管它在逻辑上是否正常工作。也许这样就可以了..
if ($users_id){
$data = DB::table('users')
->leftJoin('user_avatars', 'users.uid', '=', 'user_avatars.uid')
->leftJoin('files', 'user_avatars.fid', '=', 'files.fid')
->whereIn('users.uid', $users_id)
->select('users.uid', 'first_name', 'last_name', DB::raw('IFNULL(files.filename, \'default.jpg\') AS avatar'), 'privacy')
->get();
} else {$data = null; /*or empty set however that is defined in your framework*/ }
答案 2 :(得分:0)
在MySQL中,您无法使用IN
传递空数据集。例如,SELECT id FROM users WHERE id IN ()
不是有效的SQL。 Laravel不足以纠正这个问题;所以你需要做一个调整。快速解决方法是将非0
成员添加到数据集中。 (在这种情况下,可以安全地假设没有数据的主键为0
。)
例如,在您的代码中:
$users_id = array(0);
foreach ($contacts as $contact) {
$users_id[] = $contact->user_id;
}