调用未定义的方法 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()的主要内容,如果未能解决你的问题,请参考以下文章
未调用自定义 UIButton 的 setIsSelected 方法
调用未定义的方法 Cake\ORM\Entity::query() CakePhp