php - Yii2中如何使用leftJoin从两个表中获取所有列数据
问题描述
我试图在 Yii2books.id
中authors.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不可能吗?
解决方案
默认情况下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";
}
推荐阅读
- linux - 如何使用 gawk 定义文件名后缀
- c# - 如何在 C# winform 中以编程方式从数组复制到特定位置的数组
- java - 哪个 JAX - RS 版本与 Java 1.6 兼容?
- visual-studio - 在 Visual Studio 2019 中发布控制台应用程序
- python - 使用嵌套的for循环在python中创建一个整数金字塔
- javascript - 提交表单后无法使用会话存储来显示消息
- node.js - ExcelJS - 向现有工作表添加行
- laravel - 未定义路由 [auth.login]。拉拉维尔 8
- flutter - Google Maps Places API 自动完成配额
- html - 输入类型日期和输入类型时间没有显示它们相应的图标,也没有在移动设备上显示它们的默认占位符输入只是空白