2016-01-21 25 views
0

我有一個Laravel查詢像這個 -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(); 
} 

而且我得到這個錯誤 -

enter image description here

任何人都可以請幫助?

預先感謝幫助....

回答

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

,當您選擇thumbnail_name時,basurl會自動預置爲該值。所以你在檢索數據時不必更改任何代碼。 –

0

爲您需要在您的UserSlidePhoto模型中使用的增變,更多https://laravel.com/docs/5.1/eloquent-mutators#accessors-and-mutators.Use這種方法

public function getThumbnailNameAttribute($value) 
{ 
    return $base_url .$value; 
} 
+0

不是一個好的選擇,我喜歡用JS訪問它,所以我需要在一個地方完成所有的事情,沒有功能,只有在SQL中(也許與CONCAT的MySQL) –

+0

如果你在你的模型中使用這個增變器,然後當你進行查詢時,你的數據會根據你預期的格式而改變。你試過了嗎? 如果您使用存取器,至少嘗試一個 –

1

試圖改變你的選擇是:

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

但我認爲更好的將使用getAttribute。它甚至可以解決你的問題,即使你使用JS,因爲在現場Laravel調用mutator,並在一個響應中得到你所需要的。 所以你不需要做任何開銷,只需要寫一個mutator。希望我的回答也能幫助你。