【发布时间】:2017-01-14 15:02:25
【问题描述】:
假设我有 2 个表,列如下:
table_a: (with a corresponding model TableA)
id | (20+ other field) | deleted_at | created_at | updated_at
table_b: (with a corresponding model TableB)
id | a_id | ( 30+ other field ) | deleted_at | created_at | updated_at
现在我正在使用 laravel 并加入这两个表
$result = TableA::join('table_b', 'table_a.id', '=', 'table_b.a_id')
->where('table_b.created_at', '>=', date('Y-m-d'))
->get();
问题是当列名与 table_a 相同时,我无法访问 table_b 的某些字段。 (即id、deleted_at、created_at 和 updated_at)
我做了一些搜索,从this question on stackoverflow,我可能会这样做:
$result = TableA::join('table_b', 'table_a.id', '=', 'table_b.a_id')
->where('table_b.created_at', '>=', date('Y-m-d'))
->select('table_b.id as b_id', 'table_b.created_at as b_created_at')
->get();
但是,当使用这种方法时,我需要将所有列名添加到select语句中,而且在50多个字段上这样做很痛苦。它是一个导出功能,因此所有字段都是必需的。有没有一种方法可以在不列出所有其他不需要重命名来检索所有行的字段的情况下进行必要的重命名?或者有没有一种方法可以在不重命名的情况下检索所有行?
附:我用的是laravel 4。这是一个老项目,更新比列出所有字段还要痛苦。
【问题讨论】:
-
您必须至少重命名其中一个。您可以为其中一个表(具有更多字段的表)选择所有表并重命名另一个表:例如 'table_a.*'、'table_b.id as b_id'、'table_b.created_at as b_created_at'
标签: php laravel laravel-4 laravel-5 eloquent