2017-08-30 87 views
0

在使用selectaddSelect子句後,通過Eloquent(類似於關係如何執行)獲取某個字段到單個屬性中是否可能?有沒有辦法將選定的屬性合併到返回的Laravel模型中的特定屬性中?

我有3種型號,說模型一個Ç。我正在編寫一個RESTFUL API來檢索已過濾的模型集合A。模型有一對一的關係(屬於),和模型Ç也有一對一的關係(所屬到C)。

這裏是我到目前爲止已經取得的成就:

$builder->select(A.*); 

... 

if (array_key_exists('with_C', $options) || array_key_exists('C_name', $options)) { 
    $builder->join('B', 'A.B_id', '=', 'B.id'); 
    $builder->join('C', 'B.C_id', '=', 'C.id'); 

    if (array_key_exists('C_name', $options)) { 
     $terms = explode(' ', $options['C_name']); 

     foreach ($terms as $term) { 
      $builder->where('C.C_name', 'like', "%$term%"); 
     } 
    } 

    if (array_key_exists('with_C', $options) && $options['with_C']) { 
     $builder->addSelect('C.*'); 
    } 
} 

這似乎檢索所有我想要的信息,但是當我最終->get()後傾出所有的數據,所有的C.*屬性只是轉儲(並且一些在屬性屬性中覆蓋A.*屬性,例如ID)。

是否有任何可能的方式將C *屬性分組到檢索模型中的C屬性 - 類似於雄辯關係如何執行它?

回答

0

有時,在轉換模型時,可以添加數據庫中沒有相應列的屬性。要做到這一點,首先定義的值的訪問:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    /** 
    * Get the administrator flag for the user. 
    * 
    * @return bool 
    */ 
    public function getIsAdminAttribute() 
    { 
     return $this->attributes['admin'] == 'yes'; 
    } 
} 

創建訪問後,添加屬性名稱模型上的附加屬性。需要注意的是屬性名稱中的「蛇案」通常引用,即使訪問是使用「駝峯」定義:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    /** 
    * The accessors to append to the model's array form. 
    * 
    * @var array 
    */ 
    protected $appends = ['is_admin']; 
} 

一旦屬性已被添加到appends列表,它會被包含在這兩個模型的數組和JSON表示。 appends陣列中的屬性也將遵守模型上配置的可見和隱藏設置。

您可以相應地操縱關係數據。

希望這會有所幫助。

相關問題