Динамически загружать теги и фильтровать их в модели - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь отфильтровать мою модель по определенным тегам, связанным с ней.В настоящее время у меня есть этот код:

    $letters = \App\Letter::with(['tags' => function($query) {
        foreach(\Cookie::get('tags') as $tag => $name) {
            $query->where('tags.id', $tag);
        }
    }])->orderBy('created_at', 'desc')->where('service','send')->where('mailbox_id', '=', Auth::user()->activeMailboxId)->paginate(8);

Я хочу получить все письма с тегами отношения, чтобы затем я мог перебирать файлы cookie и динамически добавлять операторы where.Но вместо того, чтобы возвращать только Письма с тегами, которые являются массивом cookie, он возвращает все буквы, прикрепленные к моей учетной записи, кто-нибудь знает, как это сделать?

Спасибо!

1 Ответ

0 голосов
/ 08 июня 2018

вы можете использовать WhereIn, что позволит вам отправлять массив с идентификаторами, которые вам нужны для получения данных. Попробуйте это,

$letters = \App\Letter::with(['tags' => function($query) {

        //$tag array should be like this == [4,5,6]
        $query->whereIn('id', $tag);

    }])->orderBy('created_at', 'desc')
    ->where('service','send')
    ->where('mailbox_id', '=', Auth::user()
    ->activeMailboxId)
    ->paginate(8);

, вы также можете попробовать это так:

$letters = \App\Letter::with('tags')
        ->whereHas('tags',function($query) {

            //$tag array should be like this == [4,5,6]
            $query->whereIn('id', $tag);

        })->orderBy('created_at', 'desc')
        ->where('service','send')
        ->where('mailbox_id', '=', Auth::user()
        ->activeMailboxId)
        ->paginate(8);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...