Таблица фильтра, основанная на поле в другой таблице - PullRequest
0 голосов
/ 09 марта 2019

Я озадачен этим.У меня есть таблица с различными полями: $employees.Я полагаю, это то, что вы называете коллекцией. Я думаю, что при вызове возвращает все записи сотрудников в базе данных (в данном примере 4 записи)

Каждая запись сотрудника имеет следующие поля first_name, last_name, age, other_id

Есть еще одна таблица (или коллекция), которую я называю таблицей фильтров.Это называется $other_ids.Это имеет две записи со следующими полями - id, id_name.

Я хочу иметь возможность фильтровать таблицу $employees так, чтобы она только сохраняла записи, где other_id равнок одному из двух значений id в таблице фильтров - $other_ids

Так, например, если таблица фильтров имеет следующие две записи:

[{"id":1 "id_name":"one"}, {"id":2, "id_name":"two"}]

И $Таблица employee содержит записи:

[{"first_name":"ted", "surname_name":"stark", "age":35, "other_id":1},
{"first_name":"fred", "surname_name":"strange", "age":30, "other_id":2},
{"first_name":"incredible", "surname_name":"hulk", "age":25, "other_id":3},
{"first_name":"captain", "surname_name":"stone", "age":28, "other_id":2}]

После фильтрации она должна вернуть $employees_filtered Должны быть только записи 1, 2 и 4

I 'мы пытались сделать left-join и использовать whereHas и операторы where, но ничего не работает!

1 Ответ

0 голосов
/ 09 марта 2019

Я думаю, что вы ищете что-то вроде -

$otherId = [1, 2];
$employees_filtered = Employee::with('Others')->whereIn('other_id', $otherId)->get();

Пожалуйста, не забудьте установить отношения с их моделью.В Other.php модели -

public function Employees()
{
    return $this->hasMany('App\Other', 'other_id', 'id');
}

А в Employee.php модели -

public function Others()
{
    return $this->belongsTo('App\Employee', 'other_id', 'id');
}
...