首页 > 解决方案 > Yii2中如何使用leftJoin从两个表中获取所有列数据

问题描述

我试图在 Yii2books.idauthors.Name使用数组。leftJoin()

$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这个结果。

在 Laravel 中,很容易得到像上面这样的数据。Yii2不可能吗?

标签: phpsqlyii2

解决方案


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

$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直接使用:

$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";
}

推荐阅读