Php Laravel分页数据透视表
我有包含自定义产品的集合,我需要对这些集合产品进行分页,但收到错误消息 数据Php Laravel分页数据透视表,php,laravel,pivot-table,Php,Laravel,Pivot Table,我有包含自定义产品的集合,我需要对这些集合产品进行分页,但收到错误消息 数据 通过这个查询,我可以获得我的收藏和它的产品,但我无法对产品进行分页 $collection=collection::where('slug',$slug)->where('status', “活动”)->带('products')->first() 通过此查询,我收到错误消息 $collection=Product::with('collections')->whereHas('collections'), 函数($q
产品型号
public function collections()
{
return $this->belongsToMany(CollectionProduct::class, 'product_id');
}
public function collection(){
return $this->belongsToMany(CollectionProduct::class);
}
public function products(){
return $this->belongsToMany(Product::class, 'collection_products', 'collection_id', 'product_id');
}
public function collection()
{
return $this->belongsTo(Collection::class, 'collection_id','id');
}
收集模式
public function collections()
{
return $this->belongsToMany(CollectionProduct::class, 'product_id');
}
public function collection(){
return $this->belongsToMany(CollectionProduct::class);
}
public function products(){
return $this->belongsToMany(Product::class, 'collection_products', 'collection_id', 'product_id');
}
public function collection()
{
return $this->belongsTo(Collection::class, 'collection_id','id');
}
CollectionProduct model
public function collections()
{
return $this->belongsToMany(CollectionProduct::class, 'product_id');
}
public function collection(){
return $this->belongsToMany(CollectionProduct::class);
}
public function products(){
return $this->belongsToMany(Product::class, 'collection_products', 'collection_id', 'product_id');
}
public function collection()
{
return $this->belongsTo(Collection::class, 'collection_id','id');
}
控制器
默认查询
问题:
first()
方法:
$collection=Product::with('collections')->whereHas('collections',function($query)use($slug){$query->where('slug',$slug)->where('status','active')->first();})
方法first()
和get()
用于执行查询,因此您应该将它们放在雄辩方法链的末尾:
$collection = Product::with('collections')
->whereHas('collections', function($query) use($slug) {
$query->where('slug', $slug)->where('status', 'active');
})
->get();
但是,如果要对产品列表进行分页,那么真正需要的是paginate()
方法:
$collection = Product::with('collections')
->whereHas('collections', function($query) use($slug) {
$query->where('slug', $slug)->where('status', 'active');
})
->paginate(20); // will return 20 products per page
另外,Product
模型上的collections()
方法将Product\u id
列为联接表,并且正在联接到CollectionProduct
模型,而不是Collection
模型
对于您的产品
型号,请尝试以下操作:
public function collections()
{
return $this->belongsToMany(Collection::class, 'collection_products', 'product_id', 'collection_id');
}
我使用下面的代码,工作得很好 获得产品的第一步
$product = Product()->find($product_id);
然后我会收集和分页
$collections = Product::find($product_id)->collections->paginate(20);
例如,我在本文中使用了上述代码。它返回
SQLSTATE[42S02]:找不到基表或视图:1146表“shopping.product_id”不存在(SQL:select count(*)作为存在的
products`中的聚合(在collection\u products
id
id
=product\u id
collection\u products\u id
中选择*内部连接产品id
=产品id
产品id
和slug
=测试和状态
=ACTIVE)ve)`@mafortis您能发布每个模型的表定义吗?将它们添加到您上面的问题中。@mafortis nvm,我想我找到了问题所在。请查看我的更新答案。谢谢,我删除了我的解决方案,将接受您的解决方案