调用未定义的方法 Illuminate\Database\Query\Builder::unique()

Posted

技术标签:

【中文标题】调用未定义的方法 Illuminate\\Database\\Query\\Builder::unique()【英文标题】:Call to undefined method Illuminate\Database\Query\Builder::unique()调用未定义的方法 Illuminate\Database\Query\Builder::unique() 【发布时间】:2020-01-04 09:51:17 【问题描述】:

我在 Laravel (5.5.46) 中使用数据库查询生成器。在我的数据库中,一列没有唯一值,因此我希望该列中的所有值都应该是不同的或唯一的。

我使用 distinct() 方法,但它丢弃了我重复的值。所以我使用了 unique() 函数。但是我收到了这个错误。

$job_data = \DB::table('jobs')
                   ->orderBy('created_at', 'desc')
                   ->unique('job_id')->paginate(10);

在数据库 1,1,2,3,4,2

我希望是 1,2,3,4 但我收到了这个错误

BadMethodCallException

Call to undefined method Illuminate\Database\Query\Builder::unique()

【问题讨论】:

你可能想要distinct()? 是的,首先我这样做了,但没有帮助。对于distinct(),两个值都出现了。 【参考方案1】:

distinct() 方法与在查询中使用 DISTINCT 关键字相同。这不需要任何论据。你可以运行select(..) 然后distinct() 来获得你与众不同的结果。

$job_data = \DB::table('jobs')
                 ->select('job_id')
                 ->distinct()
                 ->orderBy('created_at', 'desc')
                 ->paginate(10);

【讨论】:

非常感谢您的回复。我想要所有列,那么我应该在 select() 中写什么?所有列或其他内容。 你可以做select('job_id', 'othercolumn', 'foo')等等。但请记住,您仍然可以通过这种方式获得重复的 ID——因为您要求的是不同的 ,而不是不同的 ID。如果您获得多个 ID,则行 不是不同的,并且某些值是不同的。除非您指定更多参数,否则您无法知道该选择哪一个。 我有两行在数据库中有相同的job_id。现在我只想要该表中关于job_id 的一行。这会有所帮助吗?或者我会怎么做?我知道我很困惑。 distinct() 仅在您选择的值(列)产生不同的行集时才有帮助。通过使用上面的确切代码,它将产生它。如果你开始引入更多的列,它可能不再是不同的——因为有些值是不同的...... 谢谢你的解决方案,伙计。最后一个问题,unique() 函数在 Laravel 中有,但是当我使用它时,它显示未定义,那么它是如何使用的?举个例子。【参考方案2】:

抱歉,回答延迟。您想在 Builder 上使用唯一的方法()。解决方法很简单 为避免此错误并在集合实例上使用分页,请将以下代码放在 AppServiceProvider 中。 首先你必须使用一些类:

use Illuminate\Support\Collection; 
use Illuminate\Pagination\Paginator; 
use Illuminate\Pagination\LengthAwarePaginator;

然后在boot方法中,放入如下代码....

if (!Collection::hasMacro('paginate')) 
Collection::macro('paginate', 
function ($perPage = 15, $page = null, $options = []) 
$page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
return (new LengthAwarePaginator(
$this->forPage($page, $perPage), $this->count(), $perPage, $page, $options))
->withPath('');
);

这个视频可以帮助你https://www.youtube.com/watch?v=Se6zumUNfT4

【讨论】:

以上是关于调用未定义的方法 Illuminate\Database\Query\Builder::unique()的主要内容,如果未能解决你的问题,请参考以下文章

调用未定义的方法 BelongsTo::attach()

未调用自定义 UIButton 的 setIsSelected 方法

调用未定义的方法 Cake\ORM\Entity::query() CakePhp

致命错误:未捕获的错误:调用未定义的方法 stdClass::option();

调用类方法时出现“调用未定义函数”错误

调用未定义的方法 Illuminate\Foundation\Application::bindShared()