2016-11-16 3 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

Когда вы '$ users-> ToArray()', будет 'is_member' атрибут' owner' узел. Так в чем вопрос здесь? –

+0

@Amit, когда я делаю dd ($ users), есть все атрибуты, соответствующие таблице db пользователей, но нет атрибута is_member – user947668

+0

Это нормальное поведение, и я не нашел случая использования, где вам это нужно. Приведите несколько примеров, почему вам это нужно, может быть, мы можем помочь. –

ответ

1

Согласно documentations Laravel, в $appends используется для добавления в массив и только JSON ...

После того, как атрибут был добавлен в список присоединяет, он будет включен в массив как в модели и JSON.

Итак, когда вы делаете что-то вроде dd($user). Вы не сможете увидеть поле is_member, но когда вы сделаете что-то вроде $user->toArray() или $user->toJson(), вы сделаете это.

В основном, для мест, где is_member поле всегда присутствует. Все, что вам нужно сделать, чтобы получить доступ к нему есть (скажем, в Page View/Лезвия и т.д.)

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'; ?> 

Надеется, что это очищает ваши сомнения :)

Смежные вопросы