2015-04-13 6 views
0

Я загружаю некоторые данные в модель Eloquent с помощью прилагаемого атрибута, а атрибут возвращенной модели всегда равен нулю. Я protected $appends = array('survey_status); определен в моей модели (названной Survey), и аксессор определены как таковые:

public function getSurveyStatusAttribute($value){ 
    return $value; 
} 

Я попытался установить атрибут как в качестве свойства и обозначений квадратных скобок ($this->survey_status = ... & $this->attributes['survey_status'] = ..), а также попытался с помощью метода setAppends() . до возвращения модели, все безрезультатно

об этом сообщается на форумах Laravel назад в конце сентября 2013 года и сообщил, как зафиксировано, что октябрь (см: https://github.com/laravel/framework/issues/2336 и http://laravel.io/forum/02-26-2014-model-attribute-accessor-not-working-with-object-get-helper-function)

Я на самом t версии Laravel 4 (v4.2.17), которая была выпущена в феврале этого года. И из того, что я читал в документах и ​​в других местах, кажется, как будто я делаю все правильно. Может ли кто-нибудь увидеть что-то, чего я не делаю, или подтвердить, что это все еще проблема?

UPDATE

Так что я думаю, что я понял, 75% моего вопроса. Я не знал, что вы можете передать массив в $ model-> load(), чтобы создавать сложные запросы, используя where/orWhere/etc. Так что этот базовый пример работает:

$survey = Survey::find(168); 
$survey->load(array('surveyStatus' => function ($q){ 
    $q->where('organization_id', '=', 7485); 
})); 

return Response::json($survey); 

В ответе представлена ​​моя модель SurveyStatus. Моя проблема теперь заключается в том, что я пытаюсь выполнить итерацию коллекции моделей Survey, чтобы добавить отношение SurveyStatus так же, как и рабочий выше, но атрибута нет в ответе. Это то, что я использую для перебора коллекции:

$org->surveySets->each(function ($ss) use ($id){ 
    $fye = $ss->fiscal_year_end; 

    $ss->surveys->each(function ($survey) use ($id, $fye){ 
     $sid = $survey->id; 
     $survey->load(array('surveyStatus' => function ($q) use($id, $fye){ 
     $q->where('organization_id', '=', $id)->where('fiscal_year_end', '=', $fye); 
     })); 
     $survey->content_groups->each(function ($cg) use ($id, $sid, $fye){ 
     $cg->content_rows->each(function ($cr) use ($id, $sid, $fye){ 
      $cr->questions->each(function ($q) use ($id, $sid, $fye){ 
      // do the same thing as surveyStatus but load surveyData relation into question 
      }); 
     }); 
     }); 
    }); 
    }); 

Есть ли какая-то причина нагрузка не «палки», когда итерации по коллекции?

ответ

0

Исправьте меня, если я ошибаюсь, но appends не получает значение $, потому что оно не отображается в столбец таблицы. Я всегда думал о нем как о вычислительном свойстве.

Учитывая, что у нас есть заполняемые столбцы «первый» и «последний», мы могли бы создать добавление, называемое «полное имя».

protected $appends = [ 
    'fullname' 
]; 

public function getFullnameAttribute() 
{ 
    return $this->attributes['fullname'] = $this->first . ' ' . $this->last; 
} 

По существу, я думаю, что ваше смущение заключается в том, что дополнительные данные добавляются к вашим атрибутам модели. Ожидается, что вы вернете значение из аксессора. Возвращаемое значение $ будет равно null, потому что $ value не существует, поэтому его вручную добавляет его. Попробуйте вернуть «foo» в ваш аксессуар, тогда вы поймете, что я имею в виду.

+0

Ах, я вижу. Я не понимал, как он используется. Тем не менее, есть ли способ вернуть дополнительные данные в модель, о которой вы знаете? – Joe

+0

Несомненно, можете ли вы привести пример того, что вы подразумеваете под «дополнительными данными»? Откуда вы получаете свой статус опроса? –

+0

survey_status - отдельная модель, но она зависит от пары других значений, чтобы получить один конкретный экземпляр модели. см. мое обновление выше для получения дополнительной информации – Joe

0

Здравствуйте, если вы хотите добавить дополнительные данные, относящиеся к другой модели, вы можете сделать что-то подобное.

protected $appends = [ 
    'catName' 
]; 

// relation 
public function category() 
{ 
    return $this->hasOne(PostCat::class, 'id', 'id_cat'); 
} 

//getters 
public function getCatNameAttribute() 
{ 
    return $this->category()->getEager()->first()->name; 
} 

Если связанная модель держать много дБ Row considere это

protected $with = [ 
    'category' 
]; 

protected $appends = [ 
    'catName' 
]; 

// relation 
public function category() 
{ 
    return $this->hasOne(PostCat::class, 'id', 'id_cat'); 
} 

//getters 
public function getCatNameAttribute() 
{ 
    return $this->category->name; 
} 

наилучшими пожеланиями

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