php - Laravel 查询模型

标签 php mysql laravel

在模型内创建作用域函数时出现奇怪的行为

class Measurement extends Model {
        public function scopeGetMeasurement($query, $user_id) {
            $measurements = $query->where('user_id', $user_id)
                ->join('measurement_metas', 'measurements.id', '=', 'measurement_metas.measurement_id')
                ->join('units', 'measurement_metas.unit_id', '=', 'units.id');

            return $measurements;
        }
    }

我有 3 个这样的表: 测量

measurements measurement_metas

measurement_metas 单位

units 发生了什么 $measurements 返回 id 作为 unit_id 而不是 measurements.id JSON

我做错了什么?

澄清: 我想要的只是 'id' 成为 = 'measurements.id' 而不是 'units.id',但由于 'units.id' 出现在最后,所以它显示为 'id'。

最佳答案

您的查询选择所有联接表 (SELECT *) 的所有列,因此最后一个 id 列 (unit) 会覆盖前面的列(测量measurement_metas)。

您应该对此类查询使用关系:
https://laravel.com/docs/5.6/eloquent-relationships

例如:
用户 → HasMany → 测量
测量→HasMany→Measurement_Meta
Measurement_Meta → 属于 → 单位

然后使用急切加载一次性加载它们:

User::find($user_id)->load('measurements.metas.unit')

关于php - Laravel 查询模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49039005/

相关文章:

php - 为什么 PHP 不创建这个 zip 文件(权限问题)

MySql - 选择数据长度小于 N 的列

sql-server - Laravel 的 Microsoft SQL Server 错误 : Why this solves my mistake?

php - 将联系表单的信息保存在 Laravel 的数据库中

php - 通过排除数组成员来找到所有可能性的算法的想法?

php - 高级 MySQL 查询,第 1 组列

php - 从 mysql 表中提取 id

php - $wpdb->insert 不起作用,last_query 不显示插入 "SHOW FULL COLUMNS FROM"

php - 将 Php 编码为 DB

php - 带有 Eloquent 的 Laravel 不会在数据库中保存模型属性