【发布时间】:2015-08-20 02:11:57
【问题描述】:
所以,我正在使用 Laravel 5 和 Fractal 为我的数据输出添加表示和转换层,我想知道我在下面做的事情是正确的还是矫枉过正。
我有用户表和收藏夹表,我希望我的 JSON 输出如下:
注意:密切注意嵌套数据中的profile_id和id。我基本上想要我的收藏夹以及我收藏的用户详细信息(来自用户表)。
下面,我收藏了 profile_id 404,他的详细信息(来自用户表)也嵌套了。
"data": [
{
"id": 15,
"user_id": 231,
"profile_id": 404, <------------------------ HERE
"created_date": "2013-04-10 21:35:28",
"user": {
"data": {
"id": 404, <------------------------ HERE
"username": "hugeheart12",
"has_photo": 1
}
}
},
{
"id": 64,
"user_id": 231,
"profile_id": 1085, <------------------------ HERE
"created_date": "2013-06-17 08:14:02",
"user": {
"data": {
"id": 1085, <------------------------ HERE
"username": "snowbird37",
"has_photo": 1
}
}
}
用户
身份证 (PK)
名称
用户名
电子邮件
创建日期
收藏夹
身份证
用户ID
profile_id
创建日期
用户模型
<?php namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Support\Facades\DB;
class User extends Model implements AuthenticatableContract, CanResetPasswordContract {
use Authenticatable, CanResetPassword;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
public function favourites()
{
return $this->hasMany('App\Favourites', 'profile_id', 'id');
}
public function photos()
{
return $this->hasMany('App\Photos', 'user_id', 'id');
}
最喜欢的模特
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Favourites extends Model {
protected $table = 'favourite';
public function user()
{
return $this->belongsTo('App\User', 'from', 'id');
}
}
这就是我的控制器中的内容:
$favourites = Favourites::with('user')->where('profile_id', '=', 231)->get();
$resource = new Fractal\Resource\Collection($favourites , new FavouriteTransformer());
return $this->respond(
$this->fractal->createData($resource)->toArray()
);
FavoriteTransformer
<?php
namespace App\Mmh\Transformer;
use App\Favourites;
use League\Fractal;
class FavouriteTransformer extends Fractal\TransformerAbstract
{
protected $defaultIncludes = [
'user'
];
public function transform(Favourites $favourites)
{
return [
'id' => (int)$favourites->id,
'user_id' => (int)$favourites->user_id,
'profile_id' => (int)$favourites->profile_id,
'created_date' => $favourites->created_date,
];
}
public function includeUser( Favourites $favourites )
{
return $this->item(
$favourites->user->find($favourites->profile_id), new UserTransformer
);
}
}
查看最后返回 return $this->item( $favourites->user->find($favourites->profile_id), new UserTransformer );
上面的所有代码都给了我上面的 JSON,但是有没有更好的方法或者我这样做的方式是正确的?有些事情告诉我,必须有比为每个项目查询数据库更好的方法,但我不知道如何。
感谢您的阅读。
【问题讨论】: