Почему Join не возвращает содержимое второй таблицы?

Когда мы используем оператор JOIN в SQL-запросе, мы соединяем две таблицы по определенному условию, и возвращаем только строки, которые удовлетворяют этому условию. Использование оператора JOIN не всегда означает автоматическое включение всех столбцов из обеих таблиц в результат запроса.

В фреймворке Yii, когда мы используем метод join() для соединения таблиц в запросе, получаем только общие столбцы, которые есть и в первой, и во второй таблице. Это особенность фреймворка Yii, которая работает по умолчанию.

Однако, если требуется получить все столбцы из обеих таблиц, можно воспользоваться методом leftJoin() с использованием оператора * для выбора всех столбцов. Например:

$query = (new yiidbQuery())
    ->select('*')
    ->from('table1')
    ->leftJoin('table2', 'table1.id = table2.table1_id')
    ->all();

В этом примере мы использовали метод leftJoin(), чтобы объединить таблицы table1 и table2 по условию table1.id = table2.table1_id. Затем мы использовали оператор * в методе select(), чтобы выбрать все столбцы из обеих таблиц. Наконец, метод all() возвращает все строки из результата запроса.

Если необходимо выбрать конкретные столбцы из второй таблицы, можно указать их имена в методе select(), например:

$query = (new yiidbQuery())
    ->select('table1.*, table2.column1, table2.column2')
    ->from('table1')
    ->leftJoin('table2', 'table1.id = table2.table1_id')
    ->all();

В этом примере мы выбираем все столбцы из таблицы table1 (table1.*), а также конкретные столбцы column1 и column2 из таблицы table2.

В заключение, при использовании оператора JOIN в Yii, результатом запроса будет только общая часть данных из двух таблиц. Если требуется выбрать все столбцы из второй таблицы, необходимо явно указать их в методе select(), либо использовать метод leftJoin() вместо join().