2016-11-16 128 views
0

是否有任何可能的方式,通過貪婪加載Laravel渴望模型加載

例如獲得自定義屬性值,給出一個模型這個自定義屬性:

class User extends Model { 
    protected $appends = ['is_member']; 

    public function getIsMemberAttribute() { 
     return 'yes'; 
    } 
} 

和相關模型

class Awards extends Model { 

    public function owner(){ 
     return $this->belongsTo('App\User'); 

    } 

} 

我希望能夠用下面的請求得到is_member屬性,集合:

$users=Awards::orderBy('created_at')->with('owner')->get(); 
+1

當你'$用戶 - >指定者()',將有''在屬性is_member' owner'節點。那麼這裏的問題是什麼? –

+0

@Amit當我做DD($用戶)有所有屬性對應的用戶數據庫表,但沒有is_member屬性 – user947668

+0

這是正常的行爲,我沒有找到任何用例,你需要這個。舉一些例子,爲什麼你需要這個,也許我們可以幫忙。 –

回答

1

根據Laravel的documentations$appends用於在陣列和只JSON追加...

一旦屬性已被添加到附加列表,它會被包含在這兩個模型的陣列和JSON格式。

所以,當你做一些像dd($user)這樣的事情。您將無法看到is_member字段,但是當您執行類似$user->toArray()$user->toJson()的操作時,您將會看到。

基本上,對於is_member字段總是存在的地方。所有你需要做訪問它(說在頁面視圖/刀片等)

public function show($id) { 
    $user = User::get($id); 

    return view('users.show', ['user' => $user->toArray()]); 
} 

然後呢,

Is Member? : {{ $user['is_member'] }} 

// Or if you don't like blade you can do this 
// Is Member? : <?php echo $user['is_member'] ?> 

但寫在由@Amit的意見,有沒有用這種情況下,直到您使用它的唯一目的是API。對於刀片等,你應該更喜歡這樣做

Is Member? : {{ $user->is_member ? 'Yes' : 'No' }} 

// Again if you don't like blade you can do this 
// Is Member? : <?php echo $user['is_member'] ? 'Yes' : 'No'; ?> 

希望這會清除你的疑慮:)