фильтрация создания подзапросов - PullRequest
0 голосов
/ 11 мая 2018

Я работаю над проектом Laravel и пытаюсь создать фильтр:

У меня есть следующие таблицы: pubs, tapps, pub_tapps (pub_id, tapp_id)

Я бы хотел отфильтровать элемент (в данном случае пабы) по некоторым характеристикам, которые хранятся в отдельной таблице (в нашем случае это tapps), и оба они связаны pub_tapps.

Массив выбранных идентификаторов tapps предоставляется мне, затем я хочу запросить pub_tapps, чтобы узнать pub_id, которые удовлетворяют условиям.

Например, я пытаюсь фильтровать по WIFI (tapp_id = 5) и CreditCard (tapp_id = 16). Если мы строгие, результат должен быть pub_id = 57 (tapp_id = 5,8), если не pub_id = 57 и pub_id = 16 (tapp_id = 5,7,8).

Любые идеи, чтобы сделать что-то вроде этого? Обратите внимание, что я пытаюсь фильтровать с различными значениями поля sema: S

Большое спасибо за ваше внимание.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Много ко многим

class Pubbs extends Model
{
    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function tapps()
    {
        //All but the first argument here are optional so long as you follow Laravel naming conventions
        return $this->belongsToMany(Tapps::class, 'pub_tapps', 'pub_id', 'tapp_id', 'id', 'id');
    }
}

гдеHas

$tappIds = [5, 16];
$strictMode = true;
$pubs = app(App\Models\Pubbs::class)->whereHas('tapps', function (Illuminate\Database\Eloquent\Builder $query) use ($tappIds, $strictMode) {
    $tappKey = $query->getModel()->getKeyName();
    if (!$strictMode) {
        return $query->whereIn($tappKey, $tappIds);
    }
    foreach ($tappIds as $tappId) {
        $query->where($tappKey, $tappId)
    }
})->get();
0 голосов
/ 11 мая 2018

as you you Массив выбранных tapps $ ids

выбирает tapps, удовлетворяющие вашим условиям

$tapIds = Tapps::whereIn('id',$ids)->where('condition',true)->pluck('id')->toArray();

, затем получает идентификаторы пабов в подключенной таблице

$pubIds = PubTapps::whereIn('tapp_id',$tapIds)->pluck('pub_id')->toArray();

тогда достаньте пабы

$Pubs = Pubs::whereIn('id',$pubIds)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...