我想列出学生名单,以了解每个学生购买了多少产品。我有两个表:成员和订单。在“订单”表中,具有member_id和product_id列。我想计算每个学生购买多少产品。我可以获得学生名单,但我无法计算每个学生购买多少产品。
public function index()
{
$students = Member::getStudents();
$order = Order::where('member_id', $students->id)->count();
return view('admin.student.index', compact('students'));
}
但是出现错误:
属性[id]在此集合实例上不存在。
function getStudents()
public static function getStudents()
{
$members = Member::where('member_type_id', BaseModel::$student)->get();
for ($idxMember = 0; $idxMember < count($members); $idxMember++) {
if ( $members[$idxMember]->user_id ) {
$members[$idxMember]->username = User::find($members[$idxMember]->user_id)->username;
}
}
return $members;
}
我认为是因为您获得了ID上的收藏集。因此,您应该foreach您的收藏并获取特定的ID。
public function index() {
$students = Member::getStudents();
foreach($students as $student ) {
$order = Order::where('member_id', $student->id)->count();
}
return view('admin.student.index', compact('students'));
}
我建议在数据库中使用关系。这样会更容易和简单。
在订单表中,有一个名为member_id的列,它引用成员表中的id列。 (请注意单数复数用法)
有关外键的设计和实现,请参考Laravel Documentation。>>
您需要2个模型,成员和订单。您应按以下方式定义关系。
因为这是一对多的关系,
在会员模型中,
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Member extends Model { /** * Get the orders for the member. */ public function orders() { return $this->hasMany('App\Order'); } } ?>
按订单模型,
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Order extends Model { /** * Get the member that owns the order. */ public function member() { return $this->belongsTo('App\Member'); } } ?>
现在您可以使用此代码获取每个用户的订单数。
Member::find(MEMBER_ID)->orders->count();
这将返回所选成员的订单数。
请参阅此处的Laravel文档。
您可以通过简单地使用laravel关系来实现
带有解释的共享解决方案。