选择数据并使用laravel 5.6的位置和位置

问题描述 投票:2回答:4

我正在尝试创建((Where and Where)OR(Where and Where))经过大量搜索,我发现了这一点

  $last_transations = Transcationhistorique::where('sender_id', '=', $user_id)
                            ->where('receiver_id','=', $user_id)
                            ->orderBy('created_at', 'desc')
                            ->skip(3)
                            ->take(3)
                            ->get();

我得到一个空洞的结果

“最后3笔交易”:[]

php laravel laravel-5 laravel-5.6
4个回答
6
投票

如果您正在搜索简单的where or where,请使用(使用您的查询):

$last_transations = Transcationhistorique::where('sender_id', $user_id)
                    ->orWhere('receiver_id', $user_id)
                    ->orderBy('created_at', 'desc')->skip(3)->take(3)->get();

如果您正在搜索where and where,请使用(使用您的查询):

$last_transations = Transcationhistorique::where(['sender_id' => $user_id, 'receiver_id' => $user_id])
                    ->orderBy('created_at', 'desc')->skip(3)->take(3)->get();

如果您正在搜索(where and where) OR (where and where),这有点复杂,您将使您的查询如下:

DB::table('users')
   ->where(['col1' => 'val1', 'col2' => 'val2'])
   ->orWhere(function ($query) {
         $query->where(['col3' => 'val3', 'col4' => 'val4']);
   })
   ->get();

参考qazxsw poi


1
投票

我认为你指定跳过并取错值,你可以试试下面的:

here

从文档中可以看出:

skip / take:要限制查询返回的结果数,或者要跳过查询中给定数量的结果,可以使用skip和take方法:

你正在做的是跳过3并取3,所以它将像$last_transations = Transcationhistorique::where('sender_id', $user_id) ->orWhere('receiver_id', $user_id) ->orderBy('created_at', 'desc')->skip(0)->take(3)->get(); 将返回空!


0
投票

您可以使用->offset(3)->limit(3)并将函数传递给它例如:

如果我想获得管理员并且ID为4或5的用户

where

它相当于:

$users->where("type","admin")->where(function($query){
        $query->where("id",4)->orWhere("id",5);
    })->get();

0
投票
SELECT * FROM users WHERE type = "admin" AND (id = 4 OR id = 5)

你去吧

© www.soinside.com 2019 - 2024. All rights reserved.