Laravel 查询生成器 - 自定义响应
Laravel Query Builder - Custom Response
我有一个 Laravel 这样的查询-
public function rearrangePhoto(Request $request)
{
$ordering = $request->input('ordering');
return UserSlidePhoto::where('user_id', Auth::id())
->select(
'thumbnail_name',
'original_image_name',
'id'
)
->orderBy('created_at', $ordering)
->get();
}
还有这样的模特-
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserSlidePhoto extends Model
{
protected $table="users_slides_photos";
protected $fillable=['user_id','social_image_id','provider_key','provider_id','thumbnail_name'];
public function users()
{
return $this->belongsTo('App\User')->withTimestamps();
}
}
我收到这样的回复-
[{
"thumbnail_name": "2-hR1vt2ZOOesbpGv00MRbGDYyGAMEqU.jpg",
"original_image_name": "qweqqwe.jpg",
"id": 49
},
{
"thumbnail_name": "2-xqiUrT2lJkEBQ0aA3MmZARmWlAq0BT.jpg",
"original_image_name": "tyutjh.jpg",
"id": 50
},
{
"thumbnail_name": "2-s0zzdC275XqvrT2llBQ4h9sugadCHk.jpg",
"original_image_name": "asdas.jpg",
"id": 101
}]
我喜欢这样的回复-
[{
"thumbnail_name": "base_url/2-hR1vt2ZOOesbpGv00MRbGDYyGAMEqU.jpg",
"original_image_name": "qweqqwe.jpg",
"id": 49
},
{
"thumbnail_name": "base_url/2-xqiUrT2lJkEBQ0aA3MmZARmWlAq0BT.jpg",
"original_image_name": "tyutjh.jpg",
"id": 50
},
{
"thumbnail_name": "base_url/2-s0zzdC275XqvrT2llBQ4h9sugadCHk.jpg",
"original_image_name": "asdas.jpg",
"id": 101
}]
所以我所做的就是这个-
public function rearrangePhoto(Request $request)
{
$ordering = $request->input('ordering');
$base_url = "base_url/";
return UserSlidePhoto::where('user_id', Auth::id())
->select(
$base_url . DB::raw('thumbnail_name'),
'original_image_name',
'id'
)
->orderBy('created_at', $ordering)
->get();
}
我收到这个错误-
有人可以帮忙吗?
在此先感谢您的帮助....
为此你需要使用 mutator,在你的 UserSlidePhoto 模型中更多https://laravel.com/docs/5.1/eloquent-mutators#accessors-and-mutators.Use这个方法
public function getThumbnailNameAttribute($value)
{
return $base_url .$value;
}
您正在寻找的是 Laravel 访问器。
class UserSlidePhoto extends Model
{
$base_url = "base_url/";
protected $table="users_slides_photos";
protected $fillable=['user_id','social_image_id','provider_key','provider_id','thumbnail_name'];
public function users()
{
return $this->belongsTo('App\User')->withTimestamps();
}
public getThumbnailNameAttribute($value){
return $base_url. $value;
}
}
尝试将您的 select 更改为:
select(
DB::raw('concat("'.$base_url.'/", thumbnail_name)'),
'original_image_name',
'id'
)
但我认为最好使用 getAttribute
。即使你使用 JS,它也可以解决你的问题,因为在幕后 Laravel 调用 mutator
并且在响应中你得到了你需要的东西。
所以你不需要做任何开销,只需要写一个mutator
。希望我的回答也能帮到你。
我有一个 Laravel 这样的查询-
public function rearrangePhoto(Request $request)
{
$ordering = $request->input('ordering');
return UserSlidePhoto::where('user_id', Auth::id())
->select(
'thumbnail_name',
'original_image_name',
'id'
)
->orderBy('created_at', $ordering)
->get();
}
还有这样的模特-
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserSlidePhoto extends Model
{
protected $table="users_slides_photos";
protected $fillable=['user_id','social_image_id','provider_key','provider_id','thumbnail_name'];
public function users()
{
return $this->belongsTo('App\User')->withTimestamps();
}
}
我收到这样的回复-
[{
"thumbnail_name": "2-hR1vt2ZOOesbpGv00MRbGDYyGAMEqU.jpg",
"original_image_name": "qweqqwe.jpg",
"id": 49
},
{
"thumbnail_name": "2-xqiUrT2lJkEBQ0aA3MmZARmWlAq0BT.jpg",
"original_image_name": "tyutjh.jpg",
"id": 50
},
{
"thumbnail_name": "2-s0zzdC275XqvrT2llBQ4h9sugadCHk.jpg",
"original_image_name": "asdas.jpg",
"id": 101
}]
我喜欢这样的回复-
[{
"thumbnail_name": "base_url/2-hR1vt2ZOOesbpGv00MRbGDYyGAMEqU.jpg",
"original_image_name": "qweqqwe.jpg",
"id": 49
},
{
"thumbnail_name": "base_url/2-xqiUrT2lJkEBQ0aA3MmZARmWlAq0BT.jpg",
"original_image_name": "tyutjh.jpg",
"id": 50
},
{
"thumbnail_name": "base_url/2-s0zzdC275XqvrT2llBQ4h9sugadCHk.jpg",
"original_image_name": "asdas.jpg",
"id": 101
}]
所以我所做的就是这个-
public function rearrangePhoto(Request $request)
{
$ordering = $request->input('ordering');
$base_url = "base_url/";
return UserSlidePhoto::where('user_id', Auth::id())
->select(
$base_url . DB::raw('thumbnail_name'),
'original_image_name',
'id'
)
->orderBy('created_at', $ordering)
->get();
}
我收到这个错误-
有人可以帮忙吗?
在此先感谢您的帮助....
为此你需要使用 mutator,在你的 UserSlidePhoto 模型中更多https://laravel.com/docs/5.1/eloquent-mutators#accessors-and-mutators.Use这个方法
public function getThumbnailNameAttribute($value)
{
return $base_url .$value;
}
您正在寻找的是 Laravel 访问器。
class UserSlidePhoto extends Model
{
$base_url = "base_url/";
protected $table="users_slides_photos";
protected $fillable=['user_id','social_image_id','provider_key','provider_id','thumbnail_name'];
public function users()
{
return $this->belongsTo('App\User')->withTimestamps();
}
public getThumbnailNameAttribute($value){
return $base_url. $value;
}
}
尝试将您的 select 更改为:
select(
DB::raw('concat("'.$base_url.'/", thumbnail_name)'),
'original_image_name',
'id'
)
但我认为最好使用 getAttribute
。即使你使用 JS,它也可以解决你的问题,因为在幕后 Laravel 调用 mutator
并且在响应中你得到了你需要的东西。
所以你不需要做任何开销,只需要写一个mutator
。希望我的回答也能帮到你。