簡體   English   中英

Laravel Eloquent 為模型關系設置默認值?

[英]Laravel Eloquent setting a default value for a model relation?

我有兩個模型:

class Product extends Eloquent {

    ...

    public function defaultPhoto()
    {
        return $this->belongsTo('Photo');
    }

    public function photos()
    {
        return $this->hasMany('Photo');
    }
}

class Photo extends Eloquent {

    ...

    public function getThumbAttribute() {
        return 'products/' . $this->uri . '/thumb.jpg';
    }

    public function getFullAttribute() {
        return 'products/' . $this->uri . '/full.jpg';
    }

    ...

}

這很好用,我可以調用$product->defaultPhoto->thumb$product->defaultPhoto->full並獲取相關圖像的路徑,並使用$product->photos獲取所有$product->photos並遍歷值。

當產品沒有照片時就會出現問題,我似乎無法找到一種方法來為這種情況設置默認值。

我試過做這樣的事情

public function photos() 
{
    $photos = $this->hasMany('Photo');
    if ($photos->count() === 0) {
        $p = new Photo;
        $p->url = 'default';
        $photos->add($p);
    }

    return $photos;
}

我還創建了一個全新的Collection來存儲新的Photo模型,但它們都返回相同的錯誤:

Call to undefined method Illuminate\Database\Eloquent\Collection::getResults()

有沒有人做過類似的事情?

提前致謝!

您可以在 Product 模型上創建一個為您進行檢查的訪問器。 如果你只是想將它定義為一個方法,工作原理也是一樣的(如果你想抽象一些 Eloquent 調用,為你的產品使用一個接口,以防你以后更改它,等等)

/**
 * Create a custom thumbnail "column" accessor to retrieve this product's
 * photo, or a default if it does not have one.
 * 
 * @return string
 */
public function getThumbnailAttribute()
{
    $default = $this->defaultPhoto;

    return ( ! is_null($default))
        ? $default->thumb
        : '/products/default/thumb.jpg';
}

您可能還想查看Presenters 在某些情況下有點矯枉過正,但非常方便(並且從模型中抽象出這樣的東西)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM