标签:手动 tab last 简写 route extend names function 函数
在写api的时候,数据一般是以json格式进行传输的,没有对象可以直接使用。这个时候,对数据的序列化转换就很重要,Eloquent提供了很方便的方法和约定,不仅可以转换,还可以控制里面的键值。
$user = App\User::with(‘roles‘)->first();
return $user->toArray();
把一个模型转化成数组;
$users = App\User::all();
return $users->toArray();
把collection转化为数组;
$user = App\User::find(1);
return $user->toJson();
这个是手动函数;
如果你直接返回一个模型或collection,那么系统会自动把它cast成json:
Route::get(‘users‘, function () {
return App\User::all();
});
这个你可以用路由测试一下结果;
像password这种字段,其实是不希望在json中出现给别人看到的,那么可以把它隐藏
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $hidden = [‘password‘];
}
这样写是黑名单;
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $visible = [‘first_name‘, ‘last_name‘];
}
这样写是白名单;
文档用红字写到:
Note: When hiding relationships, use the relationship‘s method name, not its dynamic property name.
意思是说,由于有些表是关联查询出来的,你可以隐藏这些表,但是填上面过滤字段的时候,不要填关联表里的字段,而是填模型表间关系的方法,这样就可以把整个表隐藏掉,如果你要隐藏关联表里的部分字段,那么到关联表里去隐藏。(本来想写个例子,老婆叫我去吃早饭了,就先不写了。)
刚才说了去掉属性,显然有时候你也需要手动增加一些属性:
第一步,增加一个Accessor:
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function getIsAdminAttribute()
{
//return $this->attributes[‘admin‘] == ‘yes‘;
//官网是这样写的,何必增加理解难度,让人混淆呢,真是的;
//我简写成这样了
return ‘yes‘;
}
}
第二步,把增加的字段添加到$appends这个数组里:
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function getIsAdminAttribute()
{
//return $this->attributes[‘admin‘] == ‘yes‘;
//官网是这样写的,何必增加理解难度,让人混淆呢,真是的;
//我简写成这样了
return ‘yes‘;
}
protected $appends = [‘is_admin‘];
}
好,json里就多了一个is_admin: "yes"
Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化
标签:手动 tab last 简写 route extend names function 函数
原文地址:http://www.cnblogs.com/isykw/p/6151983.html