php - 如何在 Laravel 中使用一个查询来进行不同的选择?

标签 php sql 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

关于php - 如何在 Laravel 中使用一个查询来进行不同的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37859485/

相关文章:

mysql - 这个sql命令有什么语法错误?

MySQL SELECT WHERE LIKE 转义数据

c# - 如何在 C# 中比较 2 个不同 MS Access 数据库中的 2 个相似表?

php - 在 laravel v5.3 中显示表格

javascript - 尽管我的路径是正确的,但在 map 上显示某些内容时,我在 laravel 中收到错误 419

php - 带前导反斜杠的 PHP 常量在哪里结束?

php - 避免box xpath和curl的头部

php - 简单的 HTML DOM 解析器不解析 <body> 标签

php - 从数据库 : Symfony 选择 id 时 SQL 查询中的语法错误 1064

php - Laravel 中的友好网址,我做对了吗?