Laravel:如何计算数据库中的数据?

问题描述 投票:0回答:4

我想列出学生名单,以了解每个学生购买了多少产品。我有两个表:成员和订单。在“订单”表中,具有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;
        }

php laravel
4个回答
0
投票

我认为是因为您获得了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'));     
}


0
投票

我建议在数据库中使用关系。这样会更容易和简单。

在订单表中,有一个名为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文档。

Relationships |One To Many| One To Many (Inverse)


0
投票

您可以通过简单地使用laravel关系来实现


0
投票

带有解释的共享解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.