Laravel Query Builder — Пользовательский ответ

У меня есть запрос 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();
}

И я получаю эту ошибку

введите описание изображения здесь

Может кто-нибудь, пожалуйста, помогите?

Заранее спасибо за помощь ….

0

Решение

То, что вы ищете, это аксессуар 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;
}
}
0

Другие решения

Попробуйте изменить свой выбор на это:

select(
DB::raw('concat("'.$base_url.'/", thumbnail_name)'),
'original_image_name',
'id'
)

Но я думаю, лучше бы использовать getAttribute, Это может решить вашу проблему, даже если вы используете JS, потому что за кулисами Laravel вызывает mutator и в ответ вы получили то, что вам нужно.
Так что вам не нужно делать никаких накладных расходов, просто напишите mutator, Надеюсь, мой ответ также может помочь вам.

1

для этого нужно использовать мутатор, для более https://laravel.com/docs/5.1/eloquent-mutators#accessors-and-mutators.Use этот метод в вашей модели UserSlidePhoto

public function getThumbnailNameAttribute($value)
{
return $base_url .$value;
}
0
По вопросам рекламы [email protected]