我正在尝试创建((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笔交易”:[]
如果您正在搜索简单的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
我认为你指定跳过并取错值,你可以试试下面的:
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();
将返回空!
您可以使用->offset(3)->limit(3)
并将函数传递给它例如:
如果我想获得管理员并且ID为4或5的用户
where
它相当于:
$users->where("type","admin")->where(function($query){
$query->where("id",4)->orWhere("id",5);
})->get();
SELECT * FROM users WHERE type = "admin" AND (id = 4 OR id = 5)
你去吧