【发布时间】:2013-12-20 15:04:06
【问题描述】:
我有两个模型:
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 获取所有照片并循环访问这些值。
当产品没有照片时会出现问题,我似乎无法找到为这种情况设置默认值的方法。
我尝试过做一些事情,例如
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()
有没有人做过类似的事情?
提前致谢!
【问题讨论】:
-
我不会把这种行为放在模型中。我会简单地使用 - if ( $product->photo === null ) { do something } - 在控制器/视图中。
-
如果你想为这些项目应用默认值,在数据库级别不是更好吗?这将允许一致地处理 NULL 情况。
-
我在视图中采取了以下措施:
{{ $product->defaultPhoto ? $product->defaultPhoto->thumb : '/img/default-product.png' }}
标签: php laravel laravel-4 eloquent