我的幼体是这样雄辩的:
$query = ItemDetail::selectRaw('a.item_number, sum(abs(a.quantity)) as "total_quantity"')
->from('item_detail as a')
->join('items as b', 'b.id', '=', 'a.item_number');
if(isset($param['vendor'])) {
$query = $query->where('b.vendor_id', '=', $param['vendor']);
}
$query = $query->groupBy('a.item_number')
->paginate($paged);
return $query;
如果执行查询,则会出现如下错误:
Relation 'a' is not instance of HasOne or BelongsTo.
我该如何解决这个问题?
更新
我的商品模型如下:
class Item extends Model
{
...
protected $fillable = [
'name',
'vendor_id'
];
public function item_details()
{
return $this->hasMany(ItemDetail::class, 'id', 'item_number');
}
}
我的商品详细模型如下:
class ItemDetail extends Model
{
....
protected $fillable = [
'item_number',
'name',
'posting_date'
];
public function item()
{
return $this->belongsTo(Item::class, 'id', 'item_number');
}
}
发布于 2018-08-02 12:41:48
根据您的几个详细信息,请确认这是否是您想要的:
项目模型:
class Item extends Model
{
...
protected $fillable = [
'name',
'vendor_id'
];
public function item_details()
{
return $this->hasMany(ItemDetail::class, 'item_number', 'id');
}
}
ItemDetail模型:
class ItemDetail extends Model
{
....
protected $fillable = [
'item_number',
'name',
'posting_date'
];
public function item()
{
return $this->belongsTo(Item::class, 'item_number', 'id');
}
}
控制器方法:
$itemDetails = ItemDetail::whereHas('item', function($q) use ($param) {
if (isset($param['vendor']){
$q->where('vendor_id', '=', $param['vendor']);
}
})
->selectRaw('item.id', 'item_detail.item_number', 'sum(abs(a.quantity)) as total_quantity')
->groupBy('item_number')->paginate($paged);
查看文件:
@foreach($itemDetails as $itemDetail)
@dump($itemDetail->item_number)
@dump($itemDetail->total_quantity)
@endforeach
发布于 2018-08-02 15:12:53
访问您想要的主模型并将其包含在其中,以及您需要包含的关系,这更有意义。
这里有一个潜在的不同的解决方案:
$query = Item::with(['item_details' => function ($query) {
$query->groupBy('item_number')->selectRaw("item_number, sum(abs(a.quantity)) as 'total_quantity'");
}]);
if (isset($param['vendor'])) {
$query->where('vendor_id', $param['vendor']);
}
$itemsPage = $query->paginate($paged);
return $pages;
如果执行以下操作,则可以访问分页数据:
foreach ($itemsPage as $item) {
// $item is an instance of Item
// $item->item_details->total_quantity should have the sum of the item details
}
发布于 2018-08-02 03:50:42
由于信息太少,我只能猜测:您的模型缺少以下内容:
public function a()
{
return $this->belongsTo(RelatedModel::class);
}
https://stackoverflow.com/questions/51641204
复制相似问题