繁体   English   中英

如何在laravel中使用一个查询进行不同选择?

[英]How to use one query for different selects in laravel?

我认为定义一个查询并将其用于以后的多个选择或计数是一个好主意,但是它不起作用。 第二个选择在sql语句中同时具有 where

$query = Pic::where('pics.user_id',$user->id);

if($cat) $query->where('cat',$cat);
if($year) $query->where('jahrprod',$year);

$zb = $query->select('pics.id','pics.title','pics.created_at')
            ->where('pics.id', '>', $pic->id)
            ->orderBy('pics.id')
            ->take(2)
            ->get()->reverse();

$za = $query->select('pics.id','pics.title','pics.created_at')
            ->where('pics.id', '<', $pic->id)
            ->orderBy('pics.id')
            ->take(13)
            ->get();

查询:

SELECT `pics`.`id`, `pics`.`title`, `pics`.`created_at` 
FROM `pics` 
WHERE `pics`.`user_id` = '3' 
    AND `pics`.`id` > '2180' 
    AND `pics`.`id` < '2180' 
ORDER BY `pics`.`id` ASC, `pics`.`id` ASC 
LIMIT 13

我试图“将其作为参考传递”,即&$query->select...但“只能将变量作为参考传递”。

如何使用查询或保存查询,并将其用于两个操作。 可能吗?

在执行$ query-> where()时,您正在使用语句更新对象状态,是的,当您进行第二次选择时,第一个条件中的所有条件仍然存在。 这就是为什么这些行无需任何分配即可工作的原因:

if($cat) $query->where('cat',$cat);
if($year) $query->where('jahrprod',$year);

要实现描述的行为,您将需要创建查询对象副本:

$query = Pic::where('pics.user_id',$user->id);

if($cat) $query->where('cat',$cat);
if($year) $query->where('jahrprod',$year);

$queryClone = clone $query;

$zb = $query->select('pics.id','pics.title','pics.created_at')
            ->where('pics.id', '>', $pic->id)
            ->orderBy('pics.id')
            ->take(2)
            ->get()->reverse();

$za = $queryClone->select('pics.id','pics.title','pics.created_at')
            ->where('pics.id', '<', $pic->id)
            ->orderBy('pics.id')
            ->take(13)
            ->get();

请注意,仅分配在这里不起作用:

$queryClone = $query;

因为那将传递对象引用,并导致与您的情况相同的行为。 克隆将创建完整的对象副本。

http://php.net/manual/en/language.oop5.cloning.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM