Юзер с книгами один-ко-многим.
Книга с авторами многие-ко-многим через промежуточную таблицу.
Код: Выделить всё
$users = Users::find()
->joinWith('books.linksBooksAuthors.author')
->andWhere('books.id')
->andWhere('links_books_authors.author_id')
->andWhere('author.id')
->all();
То есть если у юзера есть книги, но все они без авторов, то такой юзер мне не нужен.
И фильтрация работает для книг, то есть если у юзера нет книги, то в массив $users такою юзер не попадет.
Но почему-то не срабатывает фильтрация для авторов. Т.е. если юзер с книгами существует, но у него все книги без авторов, то такой юзер все-равно попадает в выборку.
Так же пробовал связывать таблицы books и authors в их моделях через viaTable, и делал так
Код: Выделить всё
$users = Users::find()
->joinWith('books.authors')
->andWhere('books.id')
->andWhere('authors.id')
->all();
Проверял запрос на mysql, он возвращает правильные данные, то есть если такой запрос написать в mysql то вся фильтрация срабатывает правильно.
Подозреваю, что надо делать joinWith вложенными друг в друга, а в каждом из этих вложенных joinWith писать свой andWhere.
Если это предположение верно, то я не нашел синтаксиса как это делается. В Yii 1.1 так можно было делать, здесь еще пока не нашел.