当前位置: 首页 > 知识库问答 >
问题:

从一对多表关系中获取特定字段是否与laravel eloquent?

利俊迈
2023-03-14

所以,用户有很多balance_transactions和最后插入的balance_transactions记录将是用户帐户余额。>表

我尝试在用户模型中使用类似的东西

public function balance {
    return $this->hasMany(App\BalanceTransaction::class);
}

public function account_balance {
    return $this->balance()->orderBy('id', 'DESC')->limit(1);
}

我得到这样的数据

$user = User::where('id', 1)->with('account_balance')->first();
return response()->json($user);

结果如下所示:

{
   "id": 1,
   "username": "john0131",
   "full_name": "john doe",
   "email": john@test.com,
   "account_balance": [
      {
          "id": 234,
          "user_id": 1,
          "total": 7850
          "added_value": 50
          "created_date": "2020-02-28 12:18:18"
      }
   ]
}

但是我想要的,回报应该是这样的下面json:

{
   "id": 1,
   "username": "john0131",
   "full_name": "john doe",
   "email": "john@test.com",
   "account_balance": 7850
}

我的问题是,如何用拉雷维尔雄辩恰当的方式制作这样的东西?因此,我只能使用像$user=user::find(1)这样的简单代码来获取账户余额数据

提前感谢


共有2个答案

蔡鸿骞
2023-03-14

我建议只从事件表中加载一行,并关注性能。此外,您可以将访问器的值附加到模型的序列化输出(例如__toArray()),并仅在关系已经加载时返回实际值。

class User extends Authenticatable
{
    protected $appends = ['account_balance'];

    public function balance()
    {
        return $this->hasMany(App\BalanceTransaction::class);
    }

    public function latestBalance()
    {
        return $this
            ->hasOne(App\BalanceTransaction::class)
            ->latest();
    }

    public function getAcountBalanceAttribute()
    {
        if (! $this->relationLoaded('latestBalance')) {
            return null;
        }

        return $this->latestBalance->total;
    }
}
裴心水
2023-03-14

解决这一问题的一种方法是,您可以使用laravel访问器

因此,在您的用户模型中,您可以创建如下方法

/**
 * Get the user's balance.
 *
 * @return float
 */
public function getAccountBalanceAttribute()
{
    return $this->balance->last()->total;
}

然后无论你想在哪里使用它,你都可以通过:$user-

 类似资料:
  • 我正在使用hibernate多对多的关联。我有3个表(STUDENT,COURSE和STUDENT_COURSE)。在3个表中,2个是主表,1个是提供关系的中间表。当记录从STUDENT中删除时,相应的映射将从Student_Course中删除。我的要求是它甚至应该从课程表中删除记录。考虑以下STUDENT_COURSE条目: 当从学生表中删除101时,上述表中的第一个条目被删除,但课程表中对应于

  • 问题内容: 我有一个使用联接表建模的一对多关系: 这些表应该模拟一个t1与多个t2的关系。使用JPA为这些表建模的正确方法是什么? 问题答案: 一个T1到多个T2的典型表是在T2上有一个指向T1的外键。通常不需要T1_T2表。 这样,JPA结构将是一对多的,可能是双向的。 可能会有一些安排,以使您描述的结构起作用。您可以更改T1_T2: 在T2上添加唯一约束(以便仅允许一个T2) 那真的是你想要的

  • 问题内容: 我正在研究Firebase项目,我在其中将用户信息存储在表中。现在,我的要求是在表中显示所有用户。这是我的数据库快照 我可以使用从数据库中获取所有用户 上面的代码向我返回了包含bod,电子邮件,姓名,性别的用户数组。但是我只想获取电子邮件和用户名。 有没有一种方法只能从数据库中获取指定的字段? 问题答案: 读取节点时,必须检索其全部内容。因此,无法从读取路径时返回的数据中仅获取 特定

  • 问题内容: 我有几个领域的大型语料库的索引。这些字段中只有一个包含文本。我需要基于此字段从整个索引中提取唯一单词。有谁知道我如何在Java中使用Lucene做到这一点? 问题答案: 您正在寻找术语向量(字段中所有单词的集合以及每个单词的使用次数,不包括停用词)。您将对索引中的每个文档使用IndexReader的getTermFreqVector(docid,field),并在其中填充。 替代方法是

  • 问题内容: 我有dbo.Users表 然后我有dbo.Phones表 然后我有dbo.Relationship表 我如何进行查询返回 这就是我到目前为止所得到的。 问题答案: 在这里,将“关系”表视为“用户”和“电话”表之间的中间人。它与映射表是多对多关系。将您的用户加入到关系中,然后将其加入到您的电话中。 可以这样想: 用户: 您好关系,我的UserId = 1,我对那个UserId有什么电话I

  • 我需要在我的数据库中创建多个多对多的关系。 有一个“主”表,我们称之为“项目”。 然后有3个表包含“选项”。 假设我们有:品类、地域、用户。这些保存的唯一信息是项目的名称和ID。 可以将多个类别、区域和用户分配给多个项目。 因此,我有两个选项来创建这种关系: 1)为每个'选项'表创建关系表。每个表包含两列:project_id和category_id、region_id或user_id。使用这种方