В моей Image
модели у меня есть два отношения с моей Article
модели, одна многие-ко-многим и один один-ко-многим:Присоединяемое результаты belongsToMany и belongsTo отношений в красноречивых
public function articlesAlbums()
{
return $this->belongsToMany('Article', 'article_image', 'image_id', 'article_id')->publishedFilter();
}
public function articleThumb()
{
return $this->hasMany('Article')->publishedFilter();
}
Я сливаться результаты из них, чтобы получить все изображения, используемые Article
:
public function getArticlesAllAttribute()
{
return $this->articlesAlbums->merge($this->articleThumb);
}
в моей Article
модели у меня есть два отношения с моей Image
модели:
public function images()
{
return $this->belongsToMany('Image', 'article_image', 'article_id', 'image_id');
}
public function thumbnail()
{
return $this->belongsTo('Image', 'image_id');
}
Я хотел бы объединить эти, а также, так же, как я делаю в моей Image
модели:
public function getImagesAllAttribute()
{
return $this->images->merge($this->thumbnail);
}
Но это не работает, это, кажется, потому что мои отношения миниатюра belongsTo
, не hasMany
, Так что, возможно, это не коллекция. Когда я пытаюсь я получаю исключение:
Call to a member function getKey() on a non-object
Я попытался преобразовать его в коллекцию с:
new Collection($this->thumbnail)
но получаю сообщение об ошибке сказав:
__construct() must be of the type array, object given
Как я могу объединить $this->images
и $this->thumbnail
в моей модели Article
, чтобы получить те же результаты, что и в моей модели Image
? Это означает, что результаты объединены без дубликатов.
Большое спасибо.
Update:
С Бритва меня понял, что $this->thumbnail
не на самом деле вернуть коллекцию, а один объект он заставил меня пересмотреть, если merge
действительно правильная функция для использования.
return $this->images->merge($this->thumbnail()->get());
Это, казалось, вызывало массу ненужных запросов, хотя я и требовал загрузки.
Так что я в конечном итоге делает это вместо:
public function getImagesAllAttribute()
{
$imagesAll = $this->images;
if (! is_null($this->thumbnail)) $imagesAll->add($this->thumbnail);
return $imagesAll->unique();
}
Это резко сократило число запросов, а результат тот же.
Отъезд [этот вопрос] (http://stackoverflow.com/questions/21615656/get-array-of -eloquent-модель-отношения). Он может пролить свет на то, как вы достигнете своего результата. То, что вы сейчас пытаетесь сделать, просто не сработает. –