laravel - 在 Laravel 中 - 将变量添加到模型中,而不将其放入数据库中
问题描述
我有一个已在多个地方使用过的团队模型,它从 API 端点中的数据库返回字段。
它当前被访问和返回是这样的:
$team = Team::find(1)
return $team;
我想向返回的集合添加一个计算变量。我想我可以将它添加到模型的构造函数中,从而将它与当前使用团队模型的所有地方一起获取,如下所示:
class Team extends Model
{
protected $table = 'teams';
protected $fillable = [
'id',
'created_at',
'updated_at',
'team_name'
];
public $number_of_players;
public function __construct( array $attributes = [] ){
$this->number_of_players = 3; //This number should be calculated
parent::__construct( $attributes );
}
}
但这不起作用。如何将变量添加到获取团队模型的所有位置?
我还研究了API Resources。我看起来这可能是一个解决方案,但我发现它非常冗长和长发解决方案(另外,我也无法让它工作)。
解决方案
您可以使用访问器/修改器
假设你们有关系
Team->Player(团队有很多玩家)
你可以这样做
在团队模型中
class Model extends Model {
public function players()
{
return $this->hasMany(Player::class, 'team_id', 'id');
}
}
现在你可以做到了
<?php
class Model extends Model {
protected $appends = ['number_of_players'];
public function players()
{
return $this->hasMany(Player::class, 'team_id', 'id');
}
public function getNumberOfPlayersAttribute()
{
return $this->players->count();
}
}
然后访问一个团队的球员数量,比如App/Team::find(1)->number_of_players
推荐阅读
- node.js - 在 Centos 6.8 中使用 Chef 安装 nodejs LTS
- ios - 使用未解析的标识符“UIBezierPath”
- python - 为 SQL 使用 Python 扩展时遇到问题
- c# - C# 中的 HttpListener 没有从 Google Actions Server 获取所有查询,如何解决?
- java - 无法理解使用 AsyncContext.startAsync() 和 AsyncContext.startAsync(req, res) 时 AsyncContext.dispatch() 的工作原理
- python - 将行附加到 csv 文件时出现问题
- maven - maven 目标使用默认的 maven repo 而不是配置的
- reactjs.net - 如何通过其父级中的“id”访问(自定义组件的)元素?(ReactJS.Net)
- kubernetes - K8s:尝试访问集群外的某个域时如何更改 pod 的名称服务器
- flutter - 如何在列内使用 FractionallySizedBox?