![](/img/trans.png)
[英]Laravel get Eloquent relation with default value if relation is not present?
[英]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.