2015-08-08 18 views
0

我有一個充滿模型的集合。該模型具有受保護的屬性值,該屬性值基本上是基於幾個參數的數字。當從數據庫加載模型時,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') 
+0

對模型集合使用'lists()'應該調用這些屬性的訪問器。你能顯示你的代碼嗎? – patricus

+0

是的,我可以,**編輯** – user2693053

回答

0

從您的模型protected $value;,它應該工作。

Laravel的getValueAttribute()魔法只有在您的模型上沒有名爲$value的屬性時纔會被調用。

我推薦閱讀Laravel的Model::__get()魔法來更好地理解它是如何工作的。

+1

謝謝,這工作。我以爲我已經嘗試過,但顯然不是 - 或者也許在另一個git分支。我會稍微研究雄辯模型。乾杯! – user2693053

0

我相信你需要刪除

protected $value; 

getValueAttribute()僅如果沒有已經是$value變量的作品,所以你追加null因爲$value永遠不會設置。

編輯

對不起互聯網連接後在竊聽了。

相關問題