试图在Yii2中使用books.id在阵列中获得authors.Name和leftJoin()

```php

$data = Book::find()

       ->select("authors.Name, books.id")

       ->leftJoin("authors", "authors.book_id = books.id")

       ->where(['books.id' => '14,16,17,18'])

       ->all();

```

但这个结果只来自books表。我在这个结果中看不到authors.Name

默认情况下,all()返回相关模型的数组,通常此模型无法表示此类查询的结果(例如Book模型没有Name字段)。通常最好使用asArray() - 然后all()将返回数组列表(可以存储查询返回的任何类型的键值对)而不是AR对象:

```php

$data = Book::find()

    ->select('authors.Name, books.id')

    ->leftJoin('authors', 'authors.book_id = books.id')

    ->where(['books.id' => '14,16,17,18'])

    ->asArray()

    ->all();

foreach ($data as $row) {

    echo "{$data['id']} - {$data['Name']}\n";

}

```

或直接使用Query

```php

$data = (new Query())

    ->select('authors.Name, books.id')

    ->from(Book::tableName())

    ->leftJoin('authors', 'authors.book_id = books.id')

    ->where(['books.id' => '14,16,17,18'])

    ->all();

foreach ($data as $row) {

    echo "{$data['id']} - {$data['Name']}\n";

}

```

在select子句->select("authors.Name, books.id")中,没有列authors.id,然后列不会从db中重新获取。

所以尝试添加此列 并使用适当的别名(例如:autors_id)为列提供另一个id referer

```php

$data = Book::find()

       ->select("authors.Name, books.id, authors.id as authors_id")

       ->leftJoin(authors, "authors.book_id = books.id")

       ->where(['books.id' => '14,16,17,18'])

       ->all()

```

并确保具有与作者列名相同的确切名称(通常列名称为小写)

```php

->select("authors.name as authors_name, books.id, authors.id as authors_id")

```

并确保有对应的字段来接收author_name和author_id的选择结果

点赞(2302) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部