Я хочу получить список пользователей, которые проголосовали за определенную ссылку - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу показать список пользователей, проголосовавших за определенную ссылку, например список пользователей, проголосовавших за ссылку 1. И т. Д. Я получаю количество голосов по каждой ссылке, но не могу понять, как получить пользователей.

Модель связи:

   /**
    *
    *links votes with respect to users
    *@return 
    */
    public function votes(){

        return $this->hasMany(Communitylinkvotes::class,'community_links_id');
    }

    // practise

    public function userss(){

        return $this->hasMany(Communitylinkvotes::class,'user_id','community_links_id');
    }

Модель CommunityLinkVotes или модель сводной таблицы

class Communitylinkvotes extends Model
{
    //

    protected $table = 'community_links_votes';
}

Миграция для голосов

  public function up()
    {
        Schema::create('community_links_votes', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->index();
            $table->integer('community_links_id')->index();
            $table->timestamps();
        });
    }

Ответы [ 4 ]

0 голосов
/ 23 сентября 2019
  public static  function get_voted_users($id){

        $result = DB::select(
            DB::raw('SELECT users.name FROM users join community_links_votes on community_links_votes.user_id = users.id 
                join community_links on community_links.id = community_links_votes.community_links_id 
                where community_links.id = '.$id.'  ')
        );

        return $result;

    }
0 голосов
/ 20 сентября 2019

Я бы посоветовал вам использовать ownToMany .Это будет легко получить то, что вы пытаетесь получить.Добавьте отношение к вашей Communitylink модели.

public function users()
    {
        return $this->belongsToMany(User::class, 'community_links_votes','user_id', 'community_links_id');
        //community_links_votes is the pivot table  
    }

Контроллер:

$link = Communitylink::find(1);

И теперь вы можете получить пользователей по этой ссылке, как показано в примере ниже в blade-файле:

@foreach($link->users as $user)
    {{ $user->name }}
@endforeach
0 голосов
/ 20 сентября 2019

Некоторые улучшения в контроллере и представлении по сравнению с @emon ... дайте мне знать, работает ли он или нет ..

public function users()
    {
    return $this->belongsToMany(User::class, 
'community_links_votes','user_id', 'community_links_id');
    //community_links_votes is the pivot table  
    }

Контроллер:

$link = Communitylink::with('users') - >first();

And now you can get the users for that link like below 
example in blade:

@foreach($link->users as $user)
{{ $user->first() - >name }}
@endforeach
0 голосов
/ 20 сентября 2019

Вы специально пытаетесь получить список пользователей, начиная с модели Link?

Если нет, сделайте что-то вроде этого:

User::whereHas('votes', function($query) use ($some_id) {
    $query->where('community_links_id', $some_id);
})->get();

Если это так, я думаю, что ваши пользователиотношение на модели Link должно быть hasManyThrough.Что-то вроде:

$this->hasManyThrough(User::class,Communitylinkvotes::class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...