Я пытаюсь добавить предложение where в мой существующий eloquent Builder. Запрос состоит из гибридного отношения между SQL и MongoDB.
Сборка таблицы SQL (класс сборки $ connection = 'mysql';)
+----+---------+--------------+-------------+----------+------------+
| id | user_id | commander_id | teamPerk_id | slot1_id | slot..._id |
+----+---------+--------------+-------------+----------+------------+
| 1 | 1 | Hero:xxxx | Perk:xxxx | Hero:xxx | Hero:xxx |
+----+---------+--------------+-------------+----------+------------+
commander, teamPerk, slot1_id, slot ..._ id - это значения для mongoDB
class Build extends Model
{
use HybridRelations;
public function commander()
{
return $this->hasOne('\App\HeroesDB', 'gameName', 'commander_id');
}
public function teamPerk()
{
return $this->hasOne('\App\Perk', 'raw', 'teamPerk_id');
}
public function slot1()
{
return $this->hasOne('\App\HeroesDB', 'gameName', 'slot1_id');
}
public function slot...()
{
return $this->hasOne('\App\HeroesDB', 'gameName', 'slot..._id');
}
}
class HeroesDB extends Eloquent
{
protected $connection = 'mongodb';
protected $collection = 'Heroes';
protected $fillable = ['*'];
}
Запрос без предложения where возвращает отношения коллекции Build (mongoDB) в teamPerk, commander, slot1-5
$data = BuildDB::with([
'teamPerk',
'commander', 'slot1', 'slot2', 'slot3', 'slot4', 'slot5',
'user',
])->withCount([
'votes',
'votes as up_votes' => function ($query) {
$query->where('type', 1);
},
'votes as down_votes' => function ($query) {
$query->where('type', -1);
},
])->orderBy(DB::raw('up_votes -down_votes'), 'desc')
->paginate(10);
Пример документа героя (HeroDB)
{
"_id": "5c7c1cb5146bd81498007f8e",
"gameName": "Hero:xxxx",
"rarity": "legendary",
"tier": "1",
"class": "Commando",
"perks": [
{
"name": "Some Perk",
}
],
"skills": [
{
"name": "Some Skill",
},
],
"translated": {
"name": "Hero name",
}
}
Вопрос заключается в том, как мне удается добавить к существующему запросу предложение where ex: Где perks.name = "Some Perk" или translation.name = "Имя героя"
Если вам требуется дополнительная информация, не стесняйтесь спрашивать. Моя попытка была добавить
->where('commander_id', '=', "Hero:xxxx")
незадолго до ->paginate()
, конечно, он будет работать, но я должен был бы указать точное "gameName", чтобы оно работало, но я не могу сослаться на него как где 'commander_id'.perks.name = "Some Perk"
или любое другое поле сбора MongoDB.