我有一個充滿模型的集合。該模型具有受保護的屬性值,該屬性值基本上是基於幾個參數的數字。當從數據庫加載模型時,value屬性爲null。在第一次嘗試訪問它時(getValueAttribute()
),值屬性被設置,因此該數字對於模型的每個單獨實例都是隨機的。如何在魔法創建屬性時使用列表?
現在我想從集合中獲取所有值。 $collection->lists('value','name')
...這將返回一個這樣的數組:['NameOfFirstValue' => null, '2ndname' => null]
。這似乎是公平的...因爲lists()
顯然不使用我的getValueAttribute()
方法。
但我仍然需要列出的arrray,似乎無法弄清楚如何。有什麼想法嗎?
編輯:我沒有提到收集是關係的結果。
加我的代碼:
我的代碼: 問題型號:
class Question extends Model{
... not relevant (?) ...
public function questionVars()
{
return $this->hasMany('\App\QuestionVar');
}
}
QuestionVar型號:
class QuestionVar extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $value;
protected $appends = ['value'];
protected $fillable = [
'question_id',
'name',
'min',
'max',
'decimals'
];
/**
* Returns the value of the QuestionVar when the 'value' property is accesed. Generates if not defined.
*
* @return float Value
*/
public function getValueAttribute()
{
if (!isset($this->value)) {
$this->value = $this->generate();
}
return $this->value;
}
... relation to Question, and some irrelevant stuff...
}
問題1有兩個QuestionVars:蘋果和葡萄。
以我EventServiceProvider當我這樣做:
public function boot(DispatcherContract $events)
{
parent::boot($events);
Question::loaded(function ($question) {
dump($question->questionVars->first()->value);
dd($question->questionVars->lists('value','name'));
});
}
我得到蘋果的值,然後陣列[蘋果=> 5,葡萄=>空]。當我忽略第一個值的轉儲時,我得到[apples => null,grapes => null]。
FYI:我搞砸周圍QuestionVar與特性位($值$ &追加),希望能解決一些東西。
問題上的加載事件在一切完成後觸發。離開出來,這樣做,會essentialy是相同的:
$question = Question::find(1);
dd($question->questionVars->lists('value','key')
對模型集合使用'lists()'應該調用這些屬性的訪問器。你能顯示你的代碼嗎? – patricus
是的,我可以,**編輯** – user2693053