LARAVEL как скрыть некоторые записи отношений? - PullRequest
0 голосов
/ 09 апреля 2020

Например, у вас есть Post & Comments и Post может иметь несколько комментариев, но данный пользователь может видеть только определенные c комментарии. Как это можно сделать?

Давайте представим ситуации, когда у нас есть пользователь, публикация и комментарии, и данный пользователь может видеть только комментарии, созданные его друзьями.

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

// User.php
public function friends()
{
    return $this->hasMany(Friend::class);
}

// CommentPolicy.php
public function view(User $user, Comment $comment)
{
    return $user->friends->pluck('id')->contains($comment->created_by_id);
}

Итак, когда мы запускаем $post->comments - можем ли мы запустить эту политику для каждой записи?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Либо вы можете использовать области, как упомянуто в другом ответе на этот вопрос.

, либо вы можете использовать фильтры в самой взаимосвязи следующим образом:

public function comments()
{
    return $this->hasMany(Comment::class)->where('is_visible', true);
}

Она будет извлекать все комментарии к сообщению, для которого is_visible установлено true

Надеюсь, это поможет вам.

Best.

0 голосов
/ 09 апреля 2020

Вы можете использовать глобальные области действия или локальные области действия для определения наборов ограничений:

 /**
 * Scope a query to only include popular comments.
 *
 * @param  \Illuminate\Database\Eloquent\Builder  $query
 * @return \Illuminate\Database\Eloquent\Builder
 */
public function scopePopular($query)
{
    return $query->where('votes', '>', 100);
}

Использование:

$post->comments()->popular()->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...