我有两个型号:
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->照片和循环获取所有照片通过价值观.
当产品没有照片时出现问题,我似乎无法找到为这种情况设置默认值的方法.
我尝试过这样的事情
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()
有人做过类似的事吗?
提前致谢!
解决方法:
您可以在产品模型上创建一个访问者,为您进行检查.如果您只想将其定义为一种方法,也可以使用相同的方法(如果您想要抽象一些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.在某些情况下有点矫枉过正,但是非常方便(并且这样的抽象事物远离你的模型).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。