Yii2 GridView отображать только связанные записи - PullRequest
0 голосов
/ 23 мая 2018

У меня есть такая структура базы данных: database model

Мне нужно, чтобы пользователь получил только те резервирования в ReservationsSeachModel, которые находятся на складе, принадлежащем пользователю.Модель user_has_warehouse имеет функцию getUserHasWarehouse ($ user_id, $ warehouse_id) для проверки связей.Я могу получить отношения при просмотре одиночных, удалении и обновлении записей в контроллерах.Но я не могу заставить SearchModel возвращать бронирования, принадлежащие текущему пользователю.Я не могу зависеть от Reservation-> user_id, потому что это значение не является обязательным и резервирование может быть вставлено публично без user_id.Как заставить SearchModel работать должным образом, чтобы он отображал только резервирования, принадлежащие складу, где у пользователя есть склад?

ReservationsSearchModel:

$warehouse_id = User_Has_Warehouse::find()->select(['warehouse_id'])->where(['user_id' => Yii::$app->user->id]);
    $freezer_type_id = Freezer_type::find()->select(['id'])->where(['warehouse_id' => $warehouse_id]);
    $reservation_id = Reservation_freezer_type::find()->select(['reservation_id'])->where(['freezer_type_id'=>$freezer_type_id]);
...
$query->andFilterWhere([
        'id' => $reservation_id,
        'customer_id' => $this->customer_id,
        'user_id' => $this->user_id,
    ]);

...

НоСледующее не сработало для меня.Что я делаю не так?

1 Ответ

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

Успешно ее решить.

$h = User_Has_Warehouse::find()->select(['warehouse_id'])->where(['user_id' => Yii::$app->user->id]);
$rt = Freezer_type::find()->select(['id'])->where(['warehouse_id' => $h]);
$res = Reservation_freezer_type::find()->select(['reservation_id'])->where(['freezer_type_id' => $rt]);

// grid filtering conditions
$query->andFilterWhere(['id' => $res]);
...