【问题标题】:Laravel Eloquent relationship fetching third table/relation valueLaravel Eloquent 关系获取第三个表/关系值
【发布时间】:2019-03-16 10:59:17
【问题描述】:

我在一个数据库中有 3 个表

  1. 事务{'id','bill_id','remark'}
  2. 账单{'id','third_party','amount'}
  3. 第三方{'id','company_name',remark}

'transaction' 表有来自 'Bills' 的列 bill_id,而 Bills 表有连接到第三方表 列的 'third_party' 列 - > 'id'

所以我在这里尝试使用 laravel eloquent 关系获取company_name

我的交易模型:

public function Bills()
{
    return $this->hasOne('App\Bills','id','bill_id');
}

账单:

public function third_party()
{
    return $this->belongsTo('App\ThirdParty','third_party','id');
} 

我得到 company_namenull

这是我正在使用的查询

Transaction::with('Bills.third_party')->get();

我已将有问题的 (third_party_name) 更正为 company_name 列名,我在这里写的是我的旧加入查询名称,在屏幕截图中可见,基本上我正在尝试获取公司名称。

【问题讨论】:

  • 我不使用 Laravel,但我没有看到任何外键,或者至少没有在我看来像外键。对于#3,该表与其他 2 表有何关系?忘记了最后一个 {'id','company_name',remark} 的引号 - 只是说。
  • 在Bills表列名中third_party是属于ThirdParty表主键'id'的外键
  • 显示相同的雄辩查询

标签: php laravel eloquent eloquent-relationship laravel-5.8


【解决方案1】:

你能展示你所有的代码吗? company_name 如何设置为third_party_name?

坚持 laravel 的“约定”或“建议的命名”也可能会收获很多,这将免费为您提供很多功能,并使您的代码更易于阅读、编写和调试。

例如。您的关系方法名称(Bills()、third_party()),但更重要的是,如果您以“laravel 方式”命名您的表字段,您将获得更轻松的关系,因为不需要定义外键等。

我会这样设置:

  1. 交易{'id','bill_id','remark'}
  2. 账单{'id','third_party_id','amount'}
  3. 第三方{'id','company_name',remark}

    class Transaction extends Model
    {
        public function Bills()
        {
            return $this->hasOne('App\Bills');
        }
    }
    
    class Bills extends Model
    {
        public function ThirdParty()
        {
            return $this->belongsTo('App\ThirdParty);
        }
    }
    

您还应该定义反向关系。

查看完整代码以了解问题所在将非常有益。

【讨论】:

  • 我更新了 eloquent 查询,查询结果以 json 编码响应返回查看。
猜你喜欢
  • 2020-07-03
  • 2017-10-18
  • 2013-12-14
  • 2017-01-12
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多