2017-02-11 4 views
0

Можно ли объединить красноречивую коллекцию с построителем запросов?Объединить красноречивую коллекцию с запросом в Laravel?

В этом примере у меня есть 3 таблицы. Таблица изображений, таблица тегов и таблица images_tag. У меня также есть красноречивые отношения в моделях изображений и тегов.

Tag.php:

class Tag extends Model { 

protected $table = 'tags'; 

public $timestamps = false; 

protected $fillable = [ 
    'tagname', 
]; 

public function Images() { 
    return $this->belongsToMany('CommendMe\Models\Images'); 
} 

} 

Images.php:

public function tags() { 
    return $this->belongsToMany('CommendMe\Models\Tag'); 
} 

То, что я хотел бы сделать что-то вроде этого:

$tag = Tag::where('tagname', $query)->first(); 

$imagesWithTag = $tag->images; 

$imagesWithoutTag = Images::where('title', 'LIKE', "%{$query}%"); 

$images = $imagesWithTag + $imagesWithoutTag 
    ->whereIn('mature', [0, $mature]) 
    ->where('created_at', '>=', Carbon::now()->subHours($withinHours)) 
    ->orderBy($orderByString, 'desc') 
    ->Paginate(50);  

По существу просто беря запрос (который возвращает n массива из таблицы изображений) и сбор (который также возвращает массив из таблицы изображений), объединяют и сортируют результаты.

Возможно ли это?

EDIT 2:

При попытке нового ответа Paras, выдается следующее сообщение об ошибке:

FatalThrowableError в SearchController.php строка 98: Вызов члена функция ToArray() на целом числе

ответ

2

Попробуйте это:

$tag = Tag::where('tagname', $query)->first(); 
$imageIds = $tag->images()->select('images.id')->get()->pluck('id')->toArray(); // assuming your images table name is "images" and primary key name is "id" 
$images = Images::where(function($q) use($imageIds, $query) { 
     $q->whereIn('id', $imageIds) 
      ->orWhere('title', 'LIKE', "%{$query}%"); 
    })->whereIn('mature', [0, $mature]) 
     ->where('created_at', '>=', Carbon::now()->subHours($withinHours)) 
     ->orderBy($orderByString, 'desc')->paginate(50); 
+0

Обновлено мое сообщение. Я хотел бы указать, что таблица изображений и таблица тегов не ссылаются друг на друга напрямую. Однако таблица images_tag. Столбцы называются tag_id и image_id. Ваше сообщение пытается получить tag_id из таблицы изображений, а не сводной таблицы. –

+0

Моя таблица изображений действительно называется «изображениями», а ее основным ключом является «id». Тем не менее, я все еще получаю сообщение об ошибке. Я обновил свой пост. –

+0

Он работает! Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^