2017-01-16 3 views
0

Я работаю над проектом и использую Laravel 5.3, у меня есть некоторые проблемы с доступом к отношениям с laravel.
Как я настроил эти отношения -
On пользователя модальный -Доступ к отношениям с laravel

public function likes() { 
    return $this->hasMany(Like::class, 'user_id'); 
} 

public function dislikes() { 
    return $this->hasMany(Dislike::class, 'user_id'); 
} 

public function posts() { 
    return $this->hasMany(Post::class); 
} 

public function comments() { 
    return $this->hasMany(Comment::class); 
} 

public function replies() { 
    return $this->belongsTo(Comment::class, 'parent_id'); 
} 

На постах модальных -

public function likes() { 
    return $this->morphMany(Like::class,'likeable'); 
} 

public function dislikes() { 
    return $this->morphMany(Dislike::class, 'dislikeable'); 
} 

public function comments() { 
    return $this->hasMany(Comment::class); 
} 

public function user() { 
    return $this->belongsTo(User::class); 
} 

Теперь вот мой вопрос. Предположим, что у одного пользователя есть 10 сообщений, и у каждого из них 20 симпатий и 10 неприязнь, то как я могу показать общие симпатии и тотальные неприязни на его сообщениях с отношениями, я знаю, как получить доступ к симпатиям и антипатиям к каждому сообщению на мой взгляд -

$post->likes->count() 
$post->dislikes->count() 

Опять я могу получить доступ к симпатиям и антипатии, сделанные любому пользователю, так как у меня есть метод на пользователь модального для доступа, и мне будет делать что-то подобное в моей модели

Но я хочу показать общее количество сообщений с общими комментариями, ответами, симпатиями и антипатиями к числам в числовом формате. Можете ли вы помочь мне в доступе к ним через отношения.

ответ

0

Короткий и простой ответ: Работайте в обратном направлении.

Dislike::whereHas('posts', function($q) { 
    return $q->where('user_id', $this->id); 
}); 

Теперь у вас будет все неприязни к конкретному пользователю на всех своих постах.

0

Вы можете использовать with заявление использовать красноречивое отношение, как показано ниже

В контроллере пользователя

User:: with(['posts'])->get(); //this with will fetch the user with all the posts and post likes/dislikes 

В модели пользователя

public function posts() { 
     return $this->hasMany(Post::class)->with(['likes','dislikes']); //this will join likes and disliks based on the relation given in post model 
    } 

В посте модели

public function likes() { 
    return $this->hasMany(Like::class,'likeable'); //relation of post with likes 
    } 



public function dislikes() { 
    return $this->hasMany(Dislike::class, 'dislikeable'); //relation of post with dislikes 
    } 
Смежные вопросы