在字符串上调用成员函数 addEagerConstraints() - Laravel 8
Call to a member function addEagerConstraints() on string - Laravel 8
我想通过 type_name 属性 获得响应,而不在 table
中添加新字段
{
"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"
}
因此我尝试在 CoinTransaction 模型中创建一个名为 typeName() 的方法,希望可以通过 with() 方法调用该方法:
$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);
但这是 return 一个错误:
Error: Call to a member function addEagerConstraints() on string...
在我的 CoinTransaction 模型中
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;
}
}
typeName
不是 relationship method
所以你有 typeName()
如下所示
$coin=CoinTransaction::find($transaction->id);
dd($coin->typeName());
或
要将 type_name
属性添加到现有响应,您可以使用 Mutators
参考:https://laravel.com/docs/8.x/eloquent-mutators#accessors-and-mutators
所以在下面添加 属性 和 CoinTransaction
中的方法
protected $appends = ['type_name'];
和方法
public function getTypeNameAttribute()
{
$typeName = null;
switch($this->type){
case 0: $typeName = 'Topup'; break;
default: $typeName = 'Unknown';
}
return $typeName;
}
所以在控制器中
$transaction = CoinTransaction::find($transaction->id);
我想通过 type_name 属性 获得响应,而不在 table
中添加新字段{
"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"
}
因此我尝试在 CoinTransaction 模型中创建一个名为 typeName() 的方法,希望可以通过 with() 方法调用该方法:
$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);
但这是 return 一个错误:
Error: Call to a member function addEagerConstraints() on string...
在我的 CoinTransaction 模型中
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;
}
}
typeName
不是 relationship method
所以你有 typeName()
如下所示
$coin=CoinTransaction::find($transaction->id);
dd($coin->typeName());
或
要将 type_name
属性添加到现有响应,您可以使用 Mutators
参考:https://laravel.com/docs/8.x/eloquent-mutators#accessors-and-mutators
所以在下面添加 属性 和 CoinTransaction
protected $appends = ['type_name'];
和方法
public function getTypeNameAttribute()
{
$typeName = null;
switch($this->type){
case 0: $typeName = 'Topup'; break;
default: $typeName = 'Unknown';
}
return $typeName;
}
所以在控制器中
$transaction = CoinTransaction::find($transaction->id);