4

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
4

1 に答える 1

4

すると、気づいたようにクエリに がskip(n)追加されます。offset nするとtake(n)、クエリに n の制限が追加されます。実際のクエリが構築されると、制限がオフセットをオーバーライドします。

しかしtake(0)、あなたはゼロの結果を返したいと言っています。Eloquentは、制限を適用したくないと考えているため、適用しません。代わりに、オフセットだけが残され、それ自体は有効なクエリを構成しません。

take()値がゼロより大きいことを確認してください。問題はありません。:)

(注: これはユニオン化されたクエリに完全に当てはまるわけではありませんが、それはまったく別のことです。)

于 2015-06-12T14:38:19.110 に答える