0

私のモデルにはクエリ関数があり、特定のオフセットと返される行の制限の入力を取得しようとしています。これはクエリ関数です。

public static function friend_activity_json($start = 0, $number_of_posts = 2) {
        $friend_activity = DB::table('fanartists')
                        ->join('fans', 'fanartists.fan_id', '=', 'fans.id')
                        ->join('artists', 'fanartists.artist_id', '=', 'artists.id')
                        ->orderBy('fanartists.created_at', 'DESC')
                        ->skip($start)
                        ->take($number_of_posts)
                        ->select('fans.fbid', 'fans.first_name', 'fans.last_name', 'fans.gender', 'fans.city', 'fanartists.artist_id', 'artists.stage_name', 'fanartists.created_at')
                        ->get();

        $posts = $json_encode($friend_activity);

        return $posts;

    }

このクエリ関数を呼び出すと、次のエラーが表示されます。

    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 `fans`.`fbid`, `fans`.`first_name`, 
`fans`.`last_name`, `fans`.`gender`, `fans`.`city`, `fanartists`.`artist_id`, 
`artists`.`stage_name`, `fanartists`.`created_at` from `fanartists` inner join `fans` on 
`fanartists`.`fan_id` = `fans`.`id` inner join `artists` on `fanartists`.`artist_id` = 
`artists`.`id` order by `fanartists`.`created_at` DESC offset 0) (Bindings: array ( )) 

問題が何であるかわかりますか?ご協力ありがとうございました。

4

3 に答える 3

0

それ以外の:

$users = User::offset(5)->get();

使用する:

$users = User::limit(10000000)->offset(5)->get();

limit() と offset() を同時に使用する必要があります

1000000 - 何も制限したくないのでランダムな大きな数字

于 2015-03-10T14:58:44.937 に答える
0

私はちょうどあなたのコードを試してみました.andにnullではない正の値を指定すれば、ここで機能し$startます$number_of_posts。に対してそれを行わないと、取得しているのとまったく同じクエリが取得されるため、関数$number_of_postsに渡すときにおそらくどこかで失敗していると思います。$number_of_posts

Illuminate\Database\Query\Builderのメソッドでソース コードを確認すると、そのtake理由がわかります。

/**
 * Set the "limit" value of the query.
 *
 * @param  int  $value
 * @return \Illuminate\Database\Query\Builder|static
 */
public function take($value)
{
    if ($value > 0) $this->limit = $value;

    return $this;
}

値が 0 より大きい場合にのみ制限値を設定します。

于 2013-07-23T01:13:56.783 に答える