首页 > 解决方案 > 在 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。我看起来这可能是一个解决方案,但我发现它非常冗长和长发解决方案(另外,我也无法让它工作)。

标签: laravel

解决方案


您可以使用访问器/修改器

假设你们有关系

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


推荐阅读