首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用string - Laravel 8上的成员函数addEagerConstraints()

调用string - Laravel 8上的成员函数addEagerConstraints()
EN

Stack Overflow用户
提问于 2021-10-24 07:24:04
回答 1查看 116关注 0票数 1

我想使用type_name属性获得响应,而不需要在表中添加新字段。

代码语言:javascript
复制
{
  "status": 200,
  "message": "OK",
  "data": {
    "id": 23,
    "uuid": "9b1d33f9-0e44-4161-9936-ec41309697a5",
    "sender_id": null,
    "receiver_id": 2,
    "type": 0,
    "coin": 200,
    "balance": 27000,
    "description": "Topup 200 coin",
    "type_name": "Topup"
}

因此,我试图在typeName模型中创建一个名为CoinTransaction ()的方法,希望可以通过这样的with()方法来调用该方法:

代码语言:javascript
复制
$transaction = CoinTransaction::create([
     'receiver_id'   => auth()->user()->id,
     'coin'          => $request->coin,
     'balance'       => $predefineCoin->balance ?? 1000,
     'type'          => 0,
     'description'   => $request->description
]);

$transaction = CoinTransaction::with(['typeName'])->find($transaction->id);

但它返回了一个错误:

代码语言:javascript
复制
Error: Call to a member function addEagerConstraints() on string...

我的CoinTransaction模型

代码语言:javascript
复制
class CoinTransaction extends Model
{
    use HasFactory;

    protected $guarded  = ['id'];


    public function sender() {
        return $this->belongsTo(User::class, 'sender_id');
    }


    public function receiver() {
        return $this->belongsTo(User::class, 'receiver_id');
    }


    public function typeName() {
        $typeName = null;

        switch($this->type){
            case 0: $typeName = 'Topup'; break;
            default: $typeName = 'Unknown';
        }

        return $typeName;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-24 07:43:30

typeName不是relationship method,所以您有如下所示的typeName()

代码语言:javascript
复制
$coin=CoinTransaction::find($transaction->id); 
dd($coin->typeName());

要将type_name属性添加到现有响应中,可以使用变异器

参考文献:https://laravel.com/docs/8.x/eloquent-mutators#accessors-and-mutators

因此,在CoinTransaction中添加下面的属性和方法

代码语言:javascript
复制
protected $appends = ['type_name'];

和方法

代码语言:javascript
复制
public function getTypeNameAttribute()
{
    $typeName = null;

        switch($this->type){
            case 0: $typeName = 'Topup'; break;
            default: $typeName = 'Unknown';
        }

        return $typeName;    
}

所以在控制器中

代码语言:javascript
复制
$transaction = CoinTransaction::find($transaction->id);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69694655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档