1 回答
TA贡献1866条经验 获得超5个赞
我认为你有两个问题:
首先,Laravel 序列化要求你附加任何你想包含的访问器——即使同名的属性已经存在。您没有在第一个示例中显式附加所需的值。
https://laravel.com/docs/5.8/eloquent-serialization#appending-values-to-json
其次,Laravel 并不总是喜欢大写的属性名称。它很高兴地期望所有内容都是小写的(snake_case),并且基于一些快速测试,$value当涉及到 case 时,似乎很难将要传递给访问器的正确关联起来。
但是,您可以修改您的访问器以直接调用该属性,而不是依赖 Laravel 来确定您的要求并达到预期的结果。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class PersonPhoto extends Model
{
protected $connection = 'mydb';
protected $table = 'PersonPhoto';
protected $primaryKey = 'PersonID';
// add the desired appends for serialization
protected $appends = ['Photo','Thumbnail'];
public function person()
{
return $this->belongsTo('App\Person', 'PersonID');
}
public function getPhotoAttribute()
{
// access the attribute directly
return base64_encode($this->attributes['Photo']);
}
public function getThumbnailAttribute()
{
// access the attribute directly
return base64_encode($this->attributes['Thumbnail']);
}
}
编辑:我实际上看到您在第二个示例中使用$this->Thumbnailand做了类似的事情$this->Photo。我的例子是相同的概念,但不依赖魔术方法。
- 1 回答
- 0 关注
- 227 浏览
添加回答
举报