Laravel 使用 skip and take 限制查询
Laravel using skip and take limiting query
我正在尝试构建一个使用 skip() 和 take() 函数的查询,由于某种原因它一直在末尾添加 offset 0
而不是它应该是 LIMIT 0,0
代码:
$dbSearch = new SchoolInfo;
$dbSearch = $dbSearch->where(function($query) use($search) {
$query->where('school_name', 'LIKE', '%'.$search.'%')
->orWhere('address_1', 'LIKE', '%'.$search.'%')
->orWhere('address_2', 'LIKE', '%'.$search.'%')
->orWhere('address_3', 'LIKE', '%'.$search.'%')
->orWhere('address_4', 'LIKE', '%'.$search.'%')
->orWhere('county', 'LIKE', '%'.$search.'%')
->orWhere('postcode', 'LIKE', '%'.$search.'%')
->orWhere('head_teacher_email', 'LIKE', '%'.$search.'%')
->orWhere('head_teacher_first', 'LIKE', '%'.$search.'%')
->orWhere('head_teacher_last', 'LIKE', '%'.$search.'%');
});
$results = $dbSearch
->skip($startat)
->take($startat)
->orderBy('school_name', 'ASC')
->get();
这是我得到的错误
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'offset 0' at line 1 (SQL: select * from `school_info` where (`school_name` LIKE %ok% or `address_1` LIKE %ok% or `address_2` LIKE %ok% or `address_3` LIKE %ok% or `address_4` LIKE %ok% or `county` LIKE %ok% or `postcode` LIKE %ok% or `head_teacher_email` LIKE %ok% or `head_teacher_first` LIKE %ok% or `head_teacher_last` LIKE %ok%) order by `school_name` asc offset 0)","file":"\/var\/www\/html\/globalrecruit\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Connection.php
当您执行 skip(n)
时,它会向查询添加一个 offset n
,如您所见。当您执行 take(n)
时,它会向查询添加 n 的限制。当构造实际查询时,限制将覆盖偏移量。
但是 take(0)
,你说你想要返回零结果。 Eloquent 认为您不想应用限制,所以没有。相反,只剩下偏移量,它本身并不构成有效查询。
确保 take()
值大于零,应该没问题。 :)
(注意:联合查询并不完全正确,但这完全是另一回事。)
我正在尝试构建一个使用 skip() 和 take() 函数的查询,由于某种原因它一直在末尾添加 offset 0
而不是它应该是 LIMIT 0,0
代码:
$dbSearch = new SchoolInfo;
$dbSearch = $dbSearch->where(function($query) use($search) {
$query->where('school_name', 'LIKE', '%'.$search.'%')
->orWhere('address_1', 'LIKE', '%'.$search.'%')
->orWhere('address_2', 'LIKE', '%'.$search.'%')
->orWhere('address_3', 'LIKE', '%'.$search.'%')
->orWhere('address_4', 'LIKE', '%'.$search.'%')
->orWhere('county', 'LIKE', '%'.$search.'%')
->orWhere('postcode', 'LIKE', '%'.$search.'%')
->orWhere('head_teacher_email', 'LIKE', '%'.$search.'%')
->orWhere('head_teacher_first', 'LIKE', '%'.$search.'%')
->orWhere('head_teacher_last', 'LIKE', '%'.$search.'%');
});
$results = $dbSearch
->skip($startat)
->take($startat)
->orderBy('school_name', 'ASC')
->get();
这是我得到的错误
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'offset 0' at line 1 (SQL: select * from `school_info` where (`school_name` LIKE %ok% or `address_1` LIKE %ok% or `address_2` LIKE %ok% or `address_3` LIKE %ok% or `address_4` LIKE %ok% or `county` LIKE %ok% or `postcode` LIKE %ok% or `head_teacher_email` LIKE %ok% or `head_teacher_first` LIKE %ok% or `head_teacher_last` LIKE %ok%) order by `school_name` asc offset 0)","file":"\/var\/www\/html\/globalrecruit\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Connection.php
当您执行 skip(n)
时,它会向查询添加一个 offset n
,如您所见。当您执行 take(n)
时,它会向查询添加 n 的限制。当构造实际查询时,限制将覆盖偏移量。
但是 take(0)
,你说你想要返回零结果。 Eloquent 认为您不想应用限制,所以没有。相反,只剩下偏移量,它本身并不构成有效查询。
确保 take()
值大于零,应该没问题。 :)
(注意:联合查询并不完全正确,但这完全是另一回事。)