У меня есть две модели:Laravel Eloquent устанавливает значение по умолчанию для отношения модели?
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()
Has кто-нибудь сделал что-нибудь подобное?
Заранее благодарен!
Я бы не поместил такое поведение в модель. Я бы просто использовал - if ($ product-> photo === null) {do something} - в контроллере/представлении. – Dave
Если вы хотите применить значения по умолчанию для этих элементов, не лучше ли это сделать на уровне базы данных? Это позволит обеспечить постоянную обработку ситуаций NULL. –
Я обратился к следующему в представлении: '{{$ product-> defaultPhoto? $ product-> defaultPhoto-> thumb: '/img/default-product.png'}} ' –