Я пытаюсь создать переменную, которая содержит последние 7 изображений, которые понравились пользователю с определенным идентификатором, чтобы я мог передать эту переменную своему представлению. Я считаю, что должен использовать whereHas()
, но пока я ничего не пробовал, поэтому возможно, что я ошибаюсь.
У меня есть следующие таблицы:
Table: Votes
Columns: id, user_id, image_id, vote
Table: Users
Columns: id, username, password
Table: Images
Columns: id, name, user_id, path
В таблице голосов, если значение голоса равно 1, оно равно и 0 - неприязнь.
У меня есть модели для 3 столов, как это:
Image
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Image extends Model
{
public function user(){
return $this->belongsTo('App\User');
}
public function votes(){
return $this->hasMany('App\Vote');
}
}
Пользователь:
<?php
namespace App;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class User extends Model implements Authenticatable
{
use \Illuminate\Auth\Authenticatable;
public function images(){
return $this->hasMany('App\Image');
}
public function votes(){
return $this->hasMany('App\Vote');
}
}
Голоса:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Vote extends Model
{
public function images(){
return $this->belongsTo('App\Images');
}
}
Мне удалось придумать что-то близкое к тому, что я имею в виду:
$likedImages = Image::where('parent_id', NULL)->whereHas('votes', function($q) use ($vote) {
return $q->where('vote', $vote);
})->orderBy('created_at', 'desc')->limit(7)->get();
К сожалению, такие изображения нравятся всем, а не только конкретному пользователю.